带有AD B2C OAuth 2.0的.Net核心API-Invalid_token错误

时间:2019-03-06 14:38:49

标签: asp.net-core oauth-2.0 azure-ad-b2c

我正在关注this资源。我可以成功获取令牌,但是在第二次调用api时使用令牌时获得401。它说Bearer错误='invalid_token'。之前它给出的是“ Invalid issuer”,所以我在appSettings.json的“ Instance”字段中解码了令牌以使用发行人。以下是appSettings和令牌。我在做什么错了?

appSettings.json

{
"AzureAdB2C": {
"Instance": "https://login.microsoftonline.com/xxxxxxxxxxxxxxxxxxxxx/v2.0/",
"ClientId": "452gfsgsdfgsdgssfs5425234",
"Domain": "xxxxxxxxxxxxxxx.onmicrosoft.com",
"SignUpSignInPolicyId": "B2C_1_Auth-SignUpIn"
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}

令牌

{
"iss": "https://login.microsoftonline.com/23423fsf234234sfsd42342vsx2542/v2.0/",
"exp": 1551878022,
"nbf": 1551874422,
"aud": "ee965664-d1e3-4144-939a-11f77c523b50",
"oid": "a9ee8ebb-433d-424b-ae24-48c73ae9969c",
"sub": "a9ee8ebb-433d-424b-ae24-48c73ae9969c",
"name": "unknown",
"extension_xxxID": "9f27fd88-7faf-e411-80e6-005056851bfe",
"emails": [
"dfgdfgadfgadfg@dgadg.com"
],
"tfp": "B2C_1_Auth-SignUpIn",
"scp": "user_impersonation",
"azp": "4453gdfgdf53535bddhdh",
"ver": "1.0",
"iat": 1551874422
}

AD B2C实例

enter image description here

Azure AD B2C设置 AD B2C

邮递员-突出显示的revalapi是上一枪中已注册应用的uri

enter image description here

令牌

enter image description here

错误

enter image description here

2 个答案:

答案 0 :(得分:0)

要首先注册B2C dotnet core application,您必须登录到B2C租户。

成功注册后,请为隐式授权流程配置以下步骤。

回复网址

确保已相应完成此步骤:

转到“设置”,然后将邮递员回叫URL添加到: https://www.getpostman.com/oauth2/callback

正确输入此URL后,请单击左上方的保存。

请参见以下屏幕截图:

enter image description here

编辑清单

对于implicit grand flow,请单击您的应用程序清单并搜索 oauth2AllowImplicitFlow 属性 使其 true

请参见以下屏幕截图:

enter image description here

您的天蓝色B2C设置是通过implicit grant flow API调用完成的。

邮递员

现在启动您的邮递员,然后将请求类型选择为OAuth 2.0,如下所示:

enter image description here

现在单击获取新访问令牌,将出现新的弹出窗口

请参见以下屏幕截图:

在身份验证网址上添加您的租户ID ,如下所示:

https://login.microsoftonline.com/YourB2CTenantId/oauth2/authorize?resource=https://graph.microsoft.com

设置您的客户ID

设置要访问的范围

enter image description here

现在点击请求令牌作为响应,您将获得隐式授予访问令牌:

查看屏幕截图:

enter image description here

使用此令牌访问数据:

在“令牌”文本框中复制您已访问的令牌,然后将令牌类型选择为 Bearer Token

请参见以下屏幕截图:

enter image description here

隐式流的棘手部分是将清单属性 oauth2AllowImplicitFlow设置为true

希望这可以解决您的问题。谢谢

答案 1 :(得分:0)

好的。看起来AD B2C + .Net Core对onmicrosoft.com URI并不满意,即使Microsoft docs资源对此表示满意。参见here。我必须使用b2clogin.com uri,如以下屏幕截图所示。希望对别人有帮助。

邮递员

enter image description here

AppSettings.json

enter image description here

Startup.Auth.cs

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddAuthentication(AzureADB2CDefaults.BearerAuthenticationScheme)
                .AddAzureADB2CBearer(options => Configuration.Bind("AzureAdB2C", options));
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
            services.AddApplicationInsightsTelemetry();             
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseHsts();
            }
            app.UseAuthentication();
            app.UseHttpsRedirection();
            app.UseMvc();            
        }