教程:在 .NET MAUI 桌面应用中使用基于角色的访问控制

适用于:带灰色 X 号的白色圆圈。 员工租户 带白色勾号的绿色圆圈。 外部租户(了解详细信息

本教程演示了如何向.NET 多平台应用 UI(.NET MAUI)添加应用角色,并在 ID 令牌中获取它们。

在本教程中,你将:

  • 访问 ID 令牌中的角色。

先决条件

在 .NET MAUI 中接收组和角色声明

配置完客户的租户后,可以在客户端应用中检索角色和组声明。 ID 令牌和访问令牌中同时存在角色和组声明。 访问令牌仅在客户端将该令牌指定用于的 Web API 中进行验证。 客户端不应验证访问令牌。

.NET MAUI 需要检查 ID 令牌中的应用角色声明,以便在客户端实现授权。

在本教程系列中,你创建了一个 .NET MAUI 应用,在其中开发了 用于 处理 ClaimsView 数据的ClaimsView.xaml.cs。 在此文件中,我们将检查 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,...。 请确保你生成应用程序是为了处理以下情况:

  • 令牌中缺少角色声明
  • 尚未将用户分配到任何角色
  • 将用户分配到多个角色时,角色声明字段中会出现多个值。

为应用定义应用角色时,你有责任为这些角色实现授权逻辑。

后续步骤

关于组声明以及如何做出有关应用角色或组使用的明智决策的更多信息,请参阅: