如何限制Azure AD应用的来宾访问?配置后未生效是什么原因
首先明确一个核心误区:企业应用中的
User assignment required开关本身不会直接拦截发往你的API的业务请求,它仅作用于用户向Azure AD申请该API访问令牌的环节,你的API本身如果没有做身份校验,不管Azure侧开什么开关,所有请求都会直接被API接收处理,不可能自动返回401。
你遗漏的配置和需要排查的点如下:
- 第一,你的ASP.NET Core API没有添加Azure AD身份校验逻辑
你必须在项目中引入Microsoft.Identity.Web相关包,在Program.cs中添加身份验证、授权中间件配置,要求所有请求必须携带Azure AD为你的API签发的有效访问令牌,否则直接返回401。这一步是必填项,不存在不需要改代码就能实现拦截的情况。 - 第二,你测试时使用的令牌不符合验证场景
你拿Postman测试时如果用的是已经在Users and groups中分配过权限的账号申请的令牌,自然可以正常访问。正确的测试方式是用未分配权限的账号,申请你API对应的scope的访问令牌,此时Azure AD会直接返回错误,不会向未分配权限的用户签发有效令牌。 - 第三,你修改配置的企业应用对象错误
很多开发者会混淆应用注册和对应的服务主体,要确认你开启User assignment required的企业应用的应用ID,和你API代码中配置的Audience、ClientId完全一致,不要误改了其他关联应用的配置。 - 第四,未限制来宾用户的全局访问权限
如果你要限制的是来宾用户访问,需要额外检查Azure AD租户的外部协作设置,确认来宾用户的访问权限级别没有设置为允许访问所有目录应用,否则User assignment required对来宾用户的限制可能不生效。 - 第五,检查是否配置了豁免的应用权限
User assignment required仅对委托权限(用户身份调用)生效,如果你给其他服务主体授予了你的API的应用权限,这类服务身份调用不受用户分配规则限制,即便没分配用户也能正常调用。
内容的提问来源于stack exchange,提问作者havij
相关产品推荐
相关产品推荐

