首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dotnet ( Microsoft.Identity.Web )注册多个身份验证提供者

dotnet ( Microsoft.Identity.Web )注册多个身份验证提供者
EN

Stack Overflow用户
提问于 2022-02-14 04:09:52
回答 1查看 364关注 0票数 0

我正在开发Web,并使用Microsoft.Identity.Web库来保护API。

我有一个场景,不同的App /控制器需要接受由不同Azure AD应用程序注册发出的令牌

目前,我有这样的事情:

代码语言:javascript
复制
services.AddMicrosoftIdentityWebApiAuthentication(Configuration.GetSection("Api1"));

services.AddAuthorization(options =>
{
    options.DefaultPolicy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
        .Build();
});

...

//Controller1
[Authorize]
[ApiController]
public class Controller1 : ControllerBase
{...}

在上面的示例中,我使用ClientID/Tenant/Audience配置部分为我的Azure注册提供了一个Api1值。

我想加入另一个授权“规则”(?)我可以将Controller2配置为接受来自第二个应用程序注册的令牌:

代码语言:javascript
复制
services.AddMicrosoftIdentityWebApiAuthentication(Configuration.GetSection("Api1"));
services.AddMicrosoftIdentityWebApiAuthentication(Configuration.GetSection("Api2")); //this probably won't work as it will clobber the services instance?

services.AddAuthorization(options =>
{
    options.DefaultPolicy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
        .Build();
});

...

//Controller1
[Authorize] --- With Api1 settings?
[ApiController]
public class Controller1 : ControllerBase
{...}


//Controller2
[Authorize] --- With Api2 settings?
[ApiController]
public class Controller2 : ControllerBase
{...}

为什么我需要使用2种不同的应用程序注册的要求超出了我的范围,不能改变。

目前,我通过创建2个Web项目/应用程序来解决这个问题,但如果可能的话,我非常喜欢合并这些项目/应用程序。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-16 14:32:27

因此,您确实可以注册多个身份验证配置文件,并且当您想要针对一个或另一个验证时,可以使用jwtBearerScheme作为区分器。

对于身份验证,可以为每个方案定义以下不同的身份验证要求:

代码语言:javascript
复制
services.AddMicrosoftIdentityWebApiAuthentication(
    Configuration.GetSection("Api1"),
    jwtBearerScheme: "Api1Scheme"
);
services.AddMicrosoftIdentityWebApiAuthentication(
    Configuration.GetSection("Api2"),
    jwtBearerScheme: "Api2Scheme"
); 

services.AddAuthorization(options =>
{
    options.AddPolicy("Api2Policy", new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .AddAuthenticationSchemes("Api2Scheme")
        .RequireRole("SomeRole")
        .Build());
    options.DefaultPolicy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .AddAuthenticationSchemes("Api1Scheme")
        .Build();
});

...

//Controller1
[Authorize] //Because ApiScheme1 is registered as the Default Authorization, no disambiguation needed here
[ApiController]
public class Controller1 : ControllerBase
{...}


//Controller2
[Authorize(AuthenticationSchemes = "Api2Scheme", Policy = "Api2Policy")] 
[ApiController]
public class Controller2 : ControllerBase
{...}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71107076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档