В приложении Asp.Net 4.8 MVC я хотел бы получить токен доступа, используя сертификат (сертификат с самостоятельным созданием) из Azure AD. Все примеры, которые я видел, используют секрет клиента. Я новичок в Azure AD, поэтому было бы здорово, если бы кто-нибудь указал мне образец, в котором используется сертификат.
До сих пор я гуглил, и примеры, которые я видел на сайте MS, используют секрет клиента.
Предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.
Я попытался получить токен доступа из консольного приложения, используя клиентский сертификат, и получил следующие результаты:
Я создал один самозаверяющий сертификат из PowerShell, используя следующий скрипт:
$certname = "sricert"
$cert = New-SelfSignedCertificate -Subject "CN=$certname" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 -KeyAlgorithm RSA -HashAlgorithm SHA256
Export-Certificate -Cert $cert -FilePath "C:/test/$certname.cer" ## Specify your preferred location
Ответ:
Чтобы экспортировать вышеуказанный сертификат в формате .pfx
, я выполнил следующие команды:
$mypwd = ConvertTo-SecureString -String "password" -Force -AsPlainText
Export-PfxCertificate -Cert $cert -FilePath "C:/test/$certname.pfx" -Password $mypwd
Ответ:
Теперь я зарегистрировал одно приложение Azure AD и добавил клиентский сертификат в формате .cer
следующим образом:
Я запустил ниже код С#, включая путь к сертификату в моем консольном приложении, и успешно получил токен доступа следующим образом:
using Microsoft.Identity.Client;
using System.Security.Cryptography.X509Certificates;
// Load the certificate from a file
X509Certificate2 certificate = new X509Certificate2("C:/test/sricert.pfx", "password");
// Create the confidential client application object
IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
.Create("appID")
.WithCertificate(certificate)
.WithAuthority(new Uri("https://login.microsoftonline.com/<tenantID>"))
.Build();
// Get the access token
string[] scopes = new string[] { "https://graph.microsoft.com/.default" };
AuthenticationResult authResult = await confidentialClientApplication.AcquireTokenForClient(scopes).ExecuteAsync();
// Print the access token
Console.WriteLine("Access token: {0}", authResult.AccessToken);
Ответ:
Когда я расшифровал вышеуказанный токен в jwt.ms, я получил утверждения, как показано ниже:
Из вопроса непонятно, но я думаю, что сертификат хранится в Azure, а не на локальной машине. Знаете ли вы, как получить сертификат, хранящийся в Azure, с помощью .NET 4.8?
Где хранится сертификат в Azure AD? В хранилище ключей Azure?