Blazor客户端应用中已分配的Azure AD角色未出现在用户声明中
问题描述
我在Azure应用注册中创建了一个角色并分配给自己:
同时已在企业应用中完成角色分配:
现在在Blazor客户端应用中尝试读取已分配的用户角色时,结果为空。相关代码如下:
读取角色的代码
var authstate = await AuthenticationStateProvider.GetAuthenticationStateAsync(); var user = authstate.User; userName = user.Identity.Name; var x = user.Claims.Where(t => t.Type == System.Security.Claims.ClaimTypes.Role).ToList();
Program.cs依赖注入配置
builder.Services.AddMsalAuthentication(options => { builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication); options.ProviderOptions.DefaultAccessTokenScopes.Add("User.Read"); });
更新内容截图:
解决方案
要在Blazor客户端中获取到Azure AD分配的角色,按以下步骤调整:
添加应用专属权限范围
在AddMsalAuthentication配置中,除了User.Read,还需添加你的应用注册的API权限范围(格式通常为api://{你的应用Client ID}/access_as_user,或自定义的角色权限范围)。示例:builder.Services.AddMsalAuthentication(options => { builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication); options.ProviderOptions.DefaultAccessTokenScopes.Add("api://your-client-id/access_as_user"); options.ProviderOptions.DefaultAccessTokenScopes.Add("User.Read"); });配置令牌包含角色声明
进入Azure门户的应用注册页面,找到你的应用,进入「令牌配置」:- 点击「添加群组声明或角色声明」
- 选择「角色」,勾选「ID令牌」和「访问令牌」
- 保存配置
验证角色分配一致性
确认企业应用中的角色分配与应用注册里的角色定义完全匹配,且已正确关联到你的用户账号。清除缓存重新登录
浏览器缓存的旧令牌可能未包含角色声明,清除缓存后重新登录应用,确保获取到最新的令牌。
内容的提问来源于stack exchange,提问作者techno
相关产品推荐
相关产品推荐

