教程:在 .NET MAUI 中使用基于角色的访问控制
本教程演示如何向 .NET 多平台应用 UI (.NET MAUI) 添加应用角色,并在 ID 令牌中接收这些角色。
本教程介绍如何执行下列操作:
- 访问 ID 令牌中的角色。
先决条件
在 .NET MAUI 中接收组和角色声明
配置完客户的租户后,可以在客户端应用中检索角色和组声明。 ID 令牌和访问令牌中同时存在角色和组声明。 访问令牌仅在客户端为其获取访问令牌的 Web API 中进行验证。 客户端不应验证访问令牌。
.NET MAUI 需要检查 ID 令牌中的应用角色声明,以便在客户端实现授权。
在本教程系统中,你已创建了一个 .NET MAUI 应用,其中你开发出 ClaimsView.xaml.cs 来处理 ClaimsView
数据。 在此文件中,我们检测 ID 令牌的内容。 在以下代码片段中检查角色声明的值:
若要访问角色声明,可以修改代码片段,如下所示:
var idToken = PublicClientSingleton.Instance.MSALClientHelper.AuthResult.IdToken;
var handler = new JwtSecurityTokenHandler();
var token = handler.ReadJwtToken(idToken);
// Get the role claim value
var roleClaim = token.Claims.FirstOrDefault(c => c.Type == "roles")?.Value;
if (!string.IsNullOrEmpty(roleClaim))
{
// If the role claim exists, add it to the IdTokenClaims
IdTokenClaims = new List<string> { roleClaim };
}
else
{
// If the role claim doesn't exist, add a message indicating that no role claim was found
IdTokenClaims = new List<string> { "No role claim found in ID token" };
}
Claims.ItemsSource = IdTokenClaims;
注意
若要读取 ID 令牌,必须安装 System.IdentityModel.Tokens.Jwt
包。
如果将用户分配到多个角色,则角色字符串会包含用逗号分隔的所有角色,例如 Orders.Manager, Store.Manager,...
。 请确保你生成应用程序是为了处理以下情况:
- 令牌中缺少角色声明
- 用户尚未分配到任何角色
- 将用户分配到多个角色时,角色声明中有多个值
为应用定义应用角色时,你有责任为这些角色实施授权逻辑。
后续步骤
有关组声明以及就应用角色或组的使用制定明智决定的更多信息,请参阅: