.NET Core 2.1 Azure AD B2C Web и API
Создать веб-приложение или API-приложение Azure AD B2C очень просто, используя VS 2017 15.7.2+
,
Поэтому я создал решение, в котором есть и то, и другое, но я пытаюсь получить токен доступа из веб-приложения и использовать его для вызова API, и я не могу найти способ.
Я попробовал вариант 1 (не работает):
private async Task<string> GetAccessTokenCacheAsync()
{
string authority = $"{AzureAdOptions.Instance}{AzureAdOptions.ClientId}/{AzureAdOptions.SignUpSignInPolicyId}/";
string clientId = AzureAdOptions.ClientId;
Uri redirectUri = new Uri("https://localhost:12345/");
string resource = targetApplicationID;
AuthenticationContext ac = new AuthenticationContext(authority);
AuthenticationResult result = null;
try
{
result = await ac.AcquireTokenSilentAsync(resource, clientId);
}
catch (AdalException adalException)
{
if (adalException.ErrorCode == AdalError.FailedToAcquireTokenSilently
|| adalException.ErrorCode == AdalError.InteractionRequired)
{
result = await ac.AcquireTokenAsync(resource, clientId, redirectUri,
new PlatformParameters()); //PromptBehavior.Auto
}
}
return result.AccessToken;
}
И я получил:
System.NotImplementedException: 'The method or operation is not implemented.'
Я попробовал вариант 2 (не работает), MSAL (Microsoft.Identity.Client):
private async Task<string> GetAccessTokenCacheAsync() {
string authority = $"{AzureAdOptions.Instance}{AzureAdOptions.ClientId}/{AzureAdOptions.SignUpSignInPolicyId}/";
PublicClientApplication myApp = new PublicClientApplication(AzureAdOptions.ClientId, authority);
AuthenticationResult authenticationResult = await myApp.AcquireTokenAsync(
new[] { $"{ApiScopeUrl}/read", $"{ApiScopeUrl}/write" }
,
myApp.Users.FirstOrDefault()
,
UIBehavior.ForceLogin
,null,null
,authority
).ConfigureAwait(false);
return authenticationResult.AccessToken;
}
И я получил:
System.NotImplementedException: 'The method or operation is not implemented.'
Я также пытался адаптировать код из примеров Azure, таких как https://github.com/Azure-Samples/active-directory-b2c-dotnet-webapp-and-webapi (Framework 4.5.1) или https://github.com/Azure-Samples/active-directory-dotnet-webapp-webapi-openidconnect-aspnetcore (Core 2.0 и OpenID, без B2C) и ошибка.
Это https://github.com/Azure-Samples/active-directory-b2c-dotnetcore-webapp также упомянуть для реализации OnAuthorizationCodeReceived
, но Core 2.1, кажется, реализовал это с AddAzureADB2C
(Черно-штучная упаковка). Документация по этой новой библиотеке, кажется, отсутствует или находится в процессе разработки, потому что я не могу ее найти.
Я хочу знать, как получить токен доступа, используя встроенные функции.NET Core 2.1?
Я верю, если я знаю, как реализовать OnAuthorizationCodeReceived
Я буду на шаг ближе, чтобы найти ответ. Вот источник кода и тикет, который я создал, относится к этому: https://github.com/aspnet/AADIntegration/issues/21