教程:在 .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,...。 请确保你生成应用程序是为了处理以下情况:

  • 令牌中缺少角色声明
  • 用户尚未分配到任何角色
  • 将用户分配到多个角色时,角色声明中有多个值

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

后续步骤

有关组声明以及就应用角色或组的使用制定明智决定的更多信息,请参阅: