原文地址: https://www.jeremyjone.com/835/,转载请注明。
前面已经写过完整的流程。今天分享一下客户端的配置。
开始之前
更多内容,可以查看我的文档:.NET 学习之路-认证中心的配置
正文开始
在 IdentityServer
中,需要我们进行配置的内容,大体分成:IdentityResource
、ApiScope
、ApiResource
和 Client
,它们都是在 IdentityServer4.Models
中定义的。
我们在创建一个 Ids 服务之后,也要首先进行配置初始数据(之前写过的 Config.cs),也就是配置这些内容。
今天要详细梳理一下这些配置,因为它们尤为重要。我们按照官方示例依次梳理:
public static IEnumerable<IdentityResource> IdentityResources => new IdentityResource[] {
};
public static IEnumerable<ApiScope> ApiScopes => new ApiScope[] {
};
public static IEnumerable<ApiResource> ApiResources => new ApiResource[] {
};
public static IEnumerable<Client> Clients => new Client[] {
};
IdentityResource
IdentityResource
是预定义的用户身份资源,它包含一些用户的基本信息,如:个人信息、地址、电话号码、邮箱等。
通常,OpenId
和 Profile
是一定给出的,尤其是 OpenId
,默认就是强制使用,用户无法取消选择。因为没有这两项信息,就无法确定是哪个用户,而且这些信息本身就是公开的。其余都是可以选项,也都可以调整。
IdentityResource 的作用
IdentityResource 用于确认用户身份,它所包含的内容通常会在 id_token
中,主要是允许哪些资源(claim)可以添加到 id_token
中。尤其是当需要一些自定义授权权限时,这些是必要且灵活的选择。
创建 IdentityResource 内容
public static IEnumerable<IdentityResource> IdentityResources =>
new IdentityResource[]
{
new IdentityResources.OpenId(),
new IdentityResources.Profile(),
new IdentityResources.Email(),
new IdentityResources.Phone(),
new IdentityResources.Address()
};
自定义 IdentityResource 内容
这些是预定义好的五项内容,我们还可以通过自定义的方式进行内容的增加:
new IdentityResource("roles", "角色信息", new List<string> {
JwtClaimTypes.Role})
这些身份信息读取用户的 Claim
,将其放入 token 中,我们得到的 token 中就会包含这些信息,从而达到获取用户信息的目的。
比如:我们查看预定义的 new IdentityResources.Email()
源码,就会看到其内部已经填写好 JwtClaimTypes.Email
与 JwtClaimType.EmailVerified
两个 claim。当我们的客户端配置了 Email
资源时,获取到的 token 中就会包含这两个 claim。
修改 IdentityResource 内容
框架给我提供了非常方便好用的扩展空间,通过构造函数就可以替换掉我们不希望的内容:
new IdentityResources.Email
{
//Name = IdentityServerConstants.StandardScopes.Email,
DisplayName = "您的邮箱",
Description = "您的邮箱地址",
Required = true,
//Emphasize = true,
UserClaims = new List<string>{
IdentityServerConstants.StandardScopes.Email }
}
这样配置之后,它将显示为中文而不是默认的英文内容,并且它是必须项,用户无法取消选择,同时在获取到的 token 中也没有了默认的 EmailVerified
项。
IdentityResource 的参数
- Enabled
否启用了该资源并且可以请求该资源。默认为 true。