原文地址: https://www.jeremyjone.com/795/,转载请注明。
开始之前
更多学习内容,可以看我的 .NET 学习之路系列-IdentityServer4 的使用,持续更新中。
正文开始
IdentityServer4 是基于 OpenId Connect(OIDC)、OAuth 2.0 统一的身份认证和授权系统。它拥有很多功能:
- 保护你的资源
- 使用本地帐户或通过外部身份提供程序对用户进行身份验证
- 提供会话管理和单点登录
- 管理和验证客户机
- 向客户发出标识和访问令牌
- 验证令牌
OpenId Connect(OIDC)
OpenId 是一种认证机制,用于对用于的身份进行认证,它允许用户使用单个账号登录多个网站。
OIDC 提供者必须记录其将哪些声明包含在其标识令牌中,有关认证的必须声明:
- aud(读者):必须包含在发行者注册的 RP 的客户机标识
- iss(发行者):OP 的发行者标识
- exp(到期时间):RP 必须再次时间之前验证标识令牌
- iat(发行时间):发放标识令牌的时间
以下声明是有关用户的必须声明:
- sub(主题):发行者的用户的本地唯一且永久标识
OAuth 2.0
OAuth 2.0 是一种授权机制,主要用于颁发令牌。
举个例子
你入职了一家公司,HR 小姐姐给了你一张门禁卡,你通过门禁卡就可以进入公司。但不一定每一间屋子都能进。-- 这就相当于颁发访问令牌。
非本公司的人没有门禁卡,他们就进不来。而你拿着这张门禁卡在公司到处溜达,不见得每个门都能打开,比如老总办公室。-- 这就是权限控制。
当你离职的时候,HR 小姐姐会收回你的门禁卡,你也就进不了公司了,这就是授权过期。
OAuth 2.0 规定了四中获得令牌的流程:
- 授权码(authorization-code)
- 隐藏式(implicit)
- 密码式(password)
- 客户端凭证(client-credentials)
1、授权码:
即客户先申请一个授权,然后再用该授权码获取令牌。这种方式最常用,安全性也最高。
因为发送参数通常都在 URL 中,并且 secret 参数是保密的,所以一定要在后端发送请求。
2、隐藏式:
即允许直接向前端颁发令牌,没有授权码的步骤。
因为随着前后端分离,大量纯前端项目的出现,导致授权码的方式在一定程度上不能实行,所以必须将令牌存储在前端,于是就有了隐藏式。
这种方式很不安全,所以只用于特定安全要求不高的环境下,并且有效期应该设置的尽量短。而且,这种回调的跳转参数通常使用锚点形式。
3、密码式:
即通过某个第三方应用输入密码进行验证,并由该应用向目标服务器请求令牌。
这种方式要求客户完全信赖其使用的第三方应用,否则不应该将密码告诉它们。
4、客户端凭证:
该方案适用于命令行应用。这种方式给出的令牌是针对第三方应用的,而非针对用户,所以可能多个用户使用同一令牌。
无论哪种方式,客户(第三方应用)都应在申请令牌之前进行系统备案,说明自己的身份,然后才会拿到两个身份识别码:
- 客户端 Id(client ID)
- 客户端秘钥(client secret)
没有备案的客户,是不会拿到令牌的。
创建 IS4 服务
IS4 官方教程:英文文档
具体代码可以看 示例代码
安装 IS4 包
通过 NuGet 管理器安装 IdentityServer4。
添加配置文件
添加一个 Config.cs 文件,并且添加如下内容:
public static class Config
{
/// <summary>
/// 配置认证资源信息
/// </summary>
public static IEnumerable<IdentityResource> Ids =>
new IdentityResource[]
{
// 认证资源,OpenId 是必须要添加的
new IdentityResources.OpenId(),
// Profile 也是需要带上的
new IdentityResources.Profile()
};
/// <summary>
/// 配置 Api 信息
/// </summary>
public static IEnumerable<ApiScope> Apis =>
new[]
{
new ApiScope("api.jeremyjone.com", "Jz.Api"),

本文介绍如何使用IdentityServer4实现OAuth2.0及OpenID Connect认证授权。涵盖安装配置、密码认证、OIDC认证等关键步骤。
最低0.47元/天 解锁文章
1653

被折叠的 条评论
为什么被折叠?



