Azure B2C自定义策略web应用程序调用web API



我有一个web应用程序,我通过自定义策略认证到Azure B2C。我想调用一个web api来接收我刚刚从身份验证中收到的令牌。

这是我的Web App。

services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(options =>
{
Configuration.Bind("AzureAdB2C", options);
})
.EnableTokenAcquisitionToCallDownstreamApi(new string[] { Configuration["ApiScope"] })
.AddInMemoryTokenCaches();
services.AddRazorPages().AddMvcOptions(options => {
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
}).AddMicrosoftIdentityUI();
下面是我的Web API:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(options =>
{
Configuration.Bind("AzureAdB2C", options);
options.TokenValidationParameters.NameClaimType = "name";
},
options => { Configuration.Bind("AzureAdB2C", options); });

示例控制器,需要一个令牌来调用web api。

[AuthorizeForScopes()]
public class PetsController : Controller

[AuthorizeForScopes()]导致重定向到通用Azure AD登录页面,而不是自定义策略流。这是我可以配置的吗?

我可以登录并获得令牌,但它应该将我重定向到自定义策略流而不是通用Azure AD登录。

请检查以下情况是否适合您。

请确保您已在"应用设置"中添加了"添加Azure B2C设置",包括策略。Json "文件,看看你是否需要添加到做列表范围下。

{
"AzureAdB2C": {
"Instance": "https://contoso.b2clogin.com",
"Domain": "contoso.onmicrosoft.com",
"ClientId": "<web-api-app-application-id>",
"SignedOutCallbackPath": "/signout/<your-sign-up-in-policy>",
"SignUpSignInPolicyId": "<your-sign-up-in-policy>"
},
// More settings here
}

假设在启动配置服务中有Services.addControllers();然后,紧接着app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

当控制器使用例如[RequiredScope("User.read")]来装饰时。RequiredScopeAttribute验证web API是否使用正确的作用域调用,例如:User.read.

尝试[AuthorizeForScopes(Scopes = new string[] { "User.Read" })](如果您的api权限范围不同,请更改),但我已经看到一些情况下,authorizeforscopes属性在api的情况下不工作。

,

[AuthorizeForScopes(Scopes = new[] { })]
[Authorize(Policy = )]
[HttpGet]
public async Task<IEnumerable<WeatherForecast>> Get()
{

所以尝试像下面这样使用你的作用域。在此之前,请确保您已暴露api在应用程序门户,给予api的权限,并授予管理员同意他们。在requiredScope中赋予该范围权限。参见验证作用域和应用程序角色保护的web API - Microsoft身份平台| Microsoft Docs

[Authorize]
[RequiredScope("User.read")]

请检查技术配置文件,如果它包括重定向的范围和端点,并检查关键项中的UserRedirectionPolicyUri是否设置。有关需要进行修改的详细信息,请参阅Azure-Sample。

如果问题与上述配置无关,请查看评论中是否列出了多个api,否则您可以随时提供更多配置或提出支持票。

其他参考文献:

  1. b2c/configure-authentication-sample-web-app-with-api | Microsoft文档
  2. b2c/enable-authentication-web-api