我正在关注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实例
邮递员-突出显示的revalapi是上一枪中已注册应用的uri
令牌
错误
答案 0 :(得分:0)
要首先注册B2C dotnet core application,您必须登录到B2C租户。
成功注册后,请为隐式授权流程配置以下步骤。
回复网址
确保已相应完成此步骤:
转到“设置”,然后将邮递员回叫URL添加到: https://www.getpostman.com/oauth2/callback
正确输入此URL后,请单击左上方的保存。
请参见以下屏幕截图:
编辑清单
对于implicit grand flow,请单击您的应用程序清单并搜索 oauth2AllowImplicitFlow 属性 使其 true
请参见以下屏幕截图:
您的天蓝色B2C设置是通过implicit grant flow API调用完成的。
邮递员
现在启动您的邮递员,然后将请求类型选择为OAuth 2.0,如下所示:
现在单击获取新访问令牌,将出现新的弹出窗口
请参见以下屏幕截图:
在身份验证网址上添加您的租户ID ,如下所示:
设置您的客户ID
设置要访问的范围
现在点击请求令牌作为响应,您将获得隐式授予访问令牌:
查看屏幕截图:
使用此令牌访问数据:
在“令牌”文本框中复制您已访问的令牌,然后将令牌类型选择为 Bearer Token
请参见以下屏幕截图:
隐式流的棘手部分是将清单属性 oauth2AllowImplicitFlow设置为true
希望这可以解决您的问题。谢谢
答案 1 :(得分:0)
好的。看起来AD B2C + .Net Core对onmicrosoft.com URI并不满意,即使Microsoft docs资源对此表示满意。参见here。我必须使用b2clogin.com uri,如以下屏幕截图所示。希望对别人有帮助。
邮递员
AppSettings.json
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();
}