本文介绍了Azure AD B2C返回与邮递员不同的访问令牌的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

我从Azure AD B2C获取访问令牌以访问我的Azure Functions API应用程序时遇到问题。当我使用带有这样的身份验证URL的邮递员时。

https://login.microsoftonline.com/<tenant id>/oauth2/v2.0/authorize

我得到了一个访问令牌,其解码结果如下所示。请注意,";ver";是2.0,并且";azp";与在Azure AD B2C中注册的我的Azure Functions应用程序的ID&aud";匹配。使用此访问令牌,我可以从Postman中的Azure Functions应用程序成功调用函数。

"aud": "a5k#####-####-####-####-#########9g3",
"iss": "https://login.microsoftonline.com/<tenant id>/v2.0",
"iat": 1629802374,
"nbf": 1629802374,
"exp": 1629806274,
"idp": "live.com",
"name": <my name>,
"oid": <my guid>,
"preferred_username": <my email address>,
"aio": <long string of letters and numbers>,
"azp": "a5k#####-####-####-####-#########9g3",
"azpacr": "1",
"rh": "0.AUMAdyGlEQW7FkCp1RsSSYyl6iM5I8M-MQZNmF3FrOT7pTJDAIg.",
"scp": "user_impersonation",
"sub": "S6HpW4l3X24dlSR9TbiLw8B4WaXuurbELbghhNlo4vY",
"tid": <tenant id>,
"uti": "SeJLTIUGmEu_12E4F4ebAQ",
"ver": "2.0"
然而,当我运行我的Blazor WebAssembly(独立)应用程序(在documentation之后创建)并通过该应用程序登录Azure AD B2C时,我得到了一个访问令牌,其解码为如下所示。请注意,";ver";为1.0,而";azp";与";aud";不匹配。使用此访问令牌,我无法从Azure Functions应用程序调用函数。相反,我收到了401未经授权的错误。

"aud": "a5k#####-####-####-####-#########9g3",
"iss": "https://<tenant>.b2clogin.com/<tenant id>/v2.0/",
"iat": 1630011614,
"nbf": 1630011614,
"exp": 1630015214,
"idp": "live.com",
"name": <my name>,
"tfp": "B2C_1_signupsignin",
"azp": "d28#####-####-####-####-#########9g3",
"scp": "user_impersonation",
"sub": "b390b1c6-720a-4d5f-8a9e-5659d38fc484",
"nonce": "0dfb75b1-9fc0-4fca-be52-97706114e3f5",
"ver": "1.0"
我发现这个documentation说明默认的Blazor模板使用v1.0身份验证,但可以使用给定的代码片段升级到v2.0身份验证。然而,给定的代码需要两个Nuget包,它们抱怨没有可用于目标平台的运行时库。有人知道如何使用Microsoft.Authentication.WebAssembly.Msal库获取v2.0访问令牌吗?

推荐答案

您试过这样的东西吗(请看最后一行):

 builder.Services
                .AddMsalAuthentication(options =>
                {
                    builder.Configuration.Bind("AzureAdB2C", options.ProviderOptions.Authentication);
                    options.ProviderOptions.DefaultAccessTokenScopes.Add(defaultScope);
                    options.UserOptions.RoleClaim = "role";
                    options.ProviderOptions.LoginMode = "Redirect";
                    options.ProviderOptions.Authentication.Authority += "/v2.0";
                })

我的appsettings.json有:

{
  "AzureAdB2C": {
    "Authority": "https://myproject.b2clogin.com/myproject.onmicrosoft.com/B2C_1_signupsignin",
    "ClientId": "the-guid",
    "ValidateAuthority": false
  }
}

我还没有测试过。应要求在";/v2.0";之前同时添加";/OAuth2/";。试试看。

这篇关于Azure AD B2C返回与邮递员不同的访问令牌的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-06 17:04