.NET Core 2.1 Azure AD B2C Web и API - PullRequest
       56

.NET Core 2.1 Azure AD B2C Web и API

0 голосов
/ 04 июня 2018

Создать приложение Web или 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

...