我有一个正在运行的。NET 5 Web-API与生产中的Blazor服务器客户端。我想使用应用程序角色从个人用户帐户切换到Azure AD,以验证我的控制器中的特定用户。我发现了很多关于Webassembly的信息,但没有Blazor服务器的信息。
为某人提供有效的解决方案。NET 5/6 Web Api与Blazor服务器客户端并集成Azure应用程序角色?
应用程序已经在Azure门户中注册等等,我只需要知道如何将应用程序角色特定的东西传递给我的API,这样我的控制器就可以使用[授权("管理员"(]东西。我怀疑它也会使用Bearer代币。
编辑:非常感谢您的阅读。所以我发现,如果我在我的控制器中使用这样的东西,只使用[授权]属性,而不使用任何角色:
var identities = HttpContext.User.Identities.ToList();
foreach (var item in identities)
{
if (item.RoleClaimType == "admin")
{
// return or do something
}
}
它会很好地工作,但必须有一些更平滑的解决方案,或者我这样做完全错了吗?当我查看WASM示例时,它们使用它们的令牌获取AppRoles,控制器只需使用[Authorize(Roles="xyz"(]属性即可。我在这里缺少什么?:/
顺便说一句,这就是我的Program.cs现在的样子:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(options =>
{
builder.Configuration.Bind("AzureAd", options);
options.TokenValidationParameters.RoleClaimType =
"admin";
options.TokenValidationParameters.RoleClaimType = "doku";
},
options => { builder.Configuration.Bind("AzureAd", options); });
谢谢大家<3
请检查给定的引用在您的案例中是否有用。
SERVER API应用程序可以授权用户使用安全组、AAD管理员角色和应用程序角色的授权策略访问安全的API端点
- 在SERVER应用程序的Program.cs中,将声明指定为角色声明
示例:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(options =>
{
Configuration.Bind("AzureAd", options);
options.TokenValidationParameters.RoleClaimType =
"http://schemas.microsoft.com/ws/2008/06/identity/claims/role";
},
options => { Configuration.Bind("AzureAd", options); });
-
然后您可以使用授权控制器上的管理员角色访问
[授权(角色="管理员"(]
-
在应用程序角色部分,您可以看到两者的配置服务器和客户端。
-
在门户中的清单编辑器中编辑应用程序角色,然后给出适当的api权限,公开作用域并为管理员授予权限同意>请参阅添加应用程序角色并从令牌获取它们。和过程逻辑必须包含api所需的那些作用域。
注意:客户端和服务器Azure门户应用程序注册必须包括相同的配置角色。
请检查此项以获取更详细的信息,这些信息对服务器和客户端应用程序都有指导作用。
其他参考:
- 在AAD blazor服务器客户端场景中使用应用程序角色|codemaze.com
- quickstart配置应用程序公开web api
- quickstart配置应用程序访问web api