- 基础篇
a) 介绍
i. 授权服务器 存储
ii. 用户/客户端/资源定义信息,颁发token
- 定义客户端
a)
- 定义Scope
a)
- 定义资源
a)
iii. 资源
简单理解->后台Api站点
iv. 客户端
要请求Api站点的浏览器,或者是一个站点
- Scope
a) 作用域简单理解为权限
b) 在授权服务器定义
c) 资源可以要求客户端有哪些Scope才能访问,资源可以自由定义多种规则,每种规则可以包含多个scope
此规则要求有scope api3 才能访问
- grant_type 验证类型
a)
b) 在授权服务器定义
c) 可以自行扩展自己的验证类型 微信登录扩展就在这里
d) 授权服务器根据grant_type判断采用哪种类型
e) 实现如上图,Password 模式没有默认实现 需要自己实现
v. 用户
使用客户端请求资源的人
b) 使用方式
i. 账密登录
- 用户打开浏览器(未登录)
- 浏览器输入账号密码
- 浏览器带上账密请求授权服务器
- 授权服务器判断账号密码正确返回token
- 浏览器带上token请求资源
ii. Code模式
- 用户访问客户端,客户端将页面跳转到授权服务器。
- 用户在新页面输入账号密码登录。
- 登录后,授权服务器将页面跳转到客户端事先指定的"重定向URI"(redirection URI),同时附上一个授权码(Code)。
- 客户端收到授权码,附上早先的"重定向URI",向授权服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。
- 授权服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)。
- 拿到令牌后,可以尽情的请求资源服务器了
c) 持久化到数据库
i. ids4默认是内存实现相关接口,只需要实现对应的接口就可以
ii. Storage定义了相关操作接口及类
iii. EntityFramework.Storage 提供了默认EF实现及相关dbContext 数据库实体类
- SqlServer项目提供了默认SqlServer的迁移数据
d) 扩展
i. 扩展验证方式 如微信登录
在default中就是自定义的扩展验证方法,实现 IExtensionGrantValidator 加到依赖注入即可 ,ids4使用接口实现如下
IExtensionGrantValidator.Result= new GrantValidationResult(TokenRequestErrors.InvalidGrant);
实现接口中new一个对象即可
i. 扩展原生实现
a) Ids4中的接口都是注入,实现自己的接口替换注入即可
ii. 扩展其他存储方式
a) 实现IdentityServer4.Storage中的对应接口即可 查询任意存储方式都行