gpt4 book ai didi

azure - 限制 Azure AD 用户访问 Web api Controller

转载 作者:行者123 更新时间:2023-12-03 02:49:48 25 4
gpt4 key购买 nike

我有一个 Web API 应用程序,仅允许授权用户访问。我通过使用属性 [Authorize] 和 Controller 来做到这一点

我是否可以限制具有给定用户名的特定用户访问应用程序,即使他/她位于 Azure AD 中?

最佳答案

Can I restrict from accessing the application a particular user with a given username even though he/she's in Azure AD?

您需要创建一个策略,并在需要时根据该策略检查当前用户。

有两种方法可以做到这一点。

  1. 使用魔术字符串配置策略(例如 [Authorize(policy="require_username=name")]),然后创建自定义策略提供程序以动态提供策略。更多详情请参见https://learn.microsoft.com/en-us/aspnet/core/security/authorization/iauthorizationpolicyprovider?view=aspnetcore-2.2
  2. 创建静态策略并使用自定义 AuthorizeFilter 来检查是否允许当前用户。

由于该线程询问“限制 Azure AD 用户访问 Web api Controller ”,因此我更喜欢第二种方式。

这是第二种方法的实现。首先,我们定义一个 requirename 策略:

services.AddAuthorization(opts =>{
opts.AddPolicy("requirename", pb => {
pb.RequireAssertion(ctx =>{
if(ctx.User==null) return false;
var requiredName = ctx.Resource as string;
return ctx.User.HasClaim("name",requiredName);
});
});
});

要检查此策略,请创建一个自定义 AuthorizeFilter,如下所示:

public class RequireNameFilterAttribute : Attribute, IAsyncAuthorizationFilter
{
public string Name{get;set;}

public RequireNameFilterAttribute(string name) { this.Name = name; }

public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
var user= context.HttpContext.User;
if(user==null){
context.Result = new ChallengeResult();
return;
}
var authZService = context.HttpContext.RequestServices.GetRequiredService<IAuthorizationService>();
var result= await authZService.AuthorizeAsync(user, this.Name, "requirename");
if (!result.Succeeded) {
context.Result = new ForbidResult();
}
}
}

最后,每当您想要拒绝没有必需名称的用户时,只需使用 RequireNameFilter(requiredName) 属性修饰操作方法即可:

[RequireNameFilter("amplifier")]
public string Test()
{
return "it works";
}
<小时/>

[编辑]

AAD 可以限制 Azure AD 用户在应用程序级别访问 Web api Controller 。但不能禁止用户访问 Controller API(API 级别)。

以下是有关在应用程序级别限制 Azure AD 用户的方法

登录您的 Azure 门户:

  1. 选择事件目录(例如默认目录)
  2. 点击[企业应用程序]
  3. 选择您要限制的应用程序(例如 AspNetCore-Quickstart)

选择[属性],将[需要用户分配]更改为

enter image description here

选择[用户和组],根据需要添加/删除此应用程序的用户:

enter image description here

请注意,Azure AD 实际上是身份提供商。此方法仅适用于整个应用程序。在不编码/配置应用程序的情况下,不可能允许某些用户访问该应用程序,但不允许他访问特定的 Controller 。为此,我们别无选择,只能在应用程序内授权使用。

关于azure - 限制 Azure AD 用户访问 Web api Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56727782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com