首页 > 解决方案 > .NET Core 2.1 Azure AD B2C Web 和 API

问题描述

使用VS 2017 15.7.2+.

因此,我创建了一个兼具两者的解决方案,但我试图从 Web 应用程序获取访问令牌并使用它来调用 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(框架 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

标签: azure-ad-b2casp.net-core-2.1.net-core-2.1

解决方案


推荐阅读