IdentityServer Topics(4)- 登录
用户必须进行登录,才能够让 IdentityServer 发出 Token
一.Cookie认证
使用 ASP.NET Core 的 Cookie 认证(传送门)
IdentityServer 注册了两个cookie处理程序(一个用于身份验证会话,另一个用于临时的外部cookie)。 它们默认使用,如果你想手动引用它们,您可以从IdentityServerConstants类(DefaultCookieAuthenticationScheme和ExternalCookieAuthenticationScheme)获取它们的名称。
IdentityServer 只公开这些cookies的基本设置(过期和滑动),如果你需要更多的控制,你可以注册你自己的cookie处理程序。 当使用了 ASP.NET Core 的AddAuthentication方法时,IdentityServer 会使用与AddAuthentication添加的AuthenticationOptions上的DefaultAuthenticateScheme相匹配的 cookie 处理程序。
二.重写cookie处理程序配置
如果你想使用你自己的cookie身份验证处理程序,那么你必须自己配置它。 在DI中注册身份服务器(使用AddIdentityServer)后,必须在ConfigureServices中完成此操作。 例如:
services.AddIdentityServer()
.AddInMemoryClients(Clients.Get())
.AddInMemoryIdentityResources(Resources.GetIdentityResources())
.AddInMemoryApiResources(Resources.GetApiResources())
.AddDeveloperSigningCredential()
.AddTestUsers(TestUsers.Users);
services.AddAuthentication("MyCookie")
.AddCookie("MyCookie", options =>
{
options.ExpireTimeSpan = ...;
});
IdentityServer 内部使用自定义方案(通过常量
IdentityServerConstants.DefaultCookieAuthenticationScheme)调用AddAuthentication和AddCookie,因此要覆盖它们,必须在AddIdentityServer之后进行相同的调用。
三.登录用户界面和身份管理系统
IdentityServer 本身不提供任何用户界面或用户数据库。 这些都需要你自己实现或者使用其他实现。
如果您需要基本用户界面(登录,注销,同意和管理授权)的快速入门,则可以使用IdentityServer提供的的quickstart UI。
quickstart UI根据内存数据库对用户进行认证。 你想取代这些那么请使用你的真实用户存储。 IdentityServer 有配合 ASP.NET Identity 的示例。
四.登录工作流程
当 IdentityServer 在授权终结点(connect/token)收到请求,且用户没有通过认证时,用户将被重定向到配置的登录页面。 您必须通过设置UserInteraction(默认为/ account / login)来通知IdentityServer您的登录页面的路径。 同时将会传递一个returnUrl参数,通知你的登录页面,一旦登录完成,用户应该被重定向到哪里。

注意通过returnUrl参数的开放重定向攻击。 你应该验证这个returnUrl指的是已知的位置。 请参阅API的交互服务来验证returnUrl参数(https://identityserver4.readthedocs.io/en/release/reference/interactionservice.html#refinteractionservice)。
五.登录上下文
在你的登录页面上,您可能需要有关请求上下文的信息,以便自定义登录体验(如客户端,提示参数,IdP提示或其他内容)。 这可以通过交互服务上的GetAuthorizationContextAsync API获得(https://identityserver4.readthedocs.io/en/release/reference/interactionservice.html#refinteractionservice)。
六.发出一个cookie和身份信息单元(Claim)
在 ASP.NET Core 的HttpContext上有与身份验证相关的扩展方法来发布身份验证cookie并签署用户。所使用的身份验证方案必须与您正在使用的cookie处理程序(请参阅上文)匹配。
当用户登录时,你必须至少发出一个sub身份单元和一个name身份单元。 IdentityServer还在HttpContext上提供了一些SignInAsync扩展方法,来方便使用。
您还可以选择发出idp身份信息单元(针对身份提供者名称,例如:QQ),amr身份信息单元针对使用的身份验证方法)或者auth_time 身份信息单元(表示用户认证的认证时间)。 如果你不设置这些,IdentityServer将设置为默认值。
IdentityServer Topics(4)- 登录的更多相关文章
- IdentityServer Topics(7)- 注销
注销IdentityServer与删除身份cookie一样简单,但是我们必须考虑将用户从客户端应用程序(甚至可能是上游身份提供程序)中注销. 一.删除身份认证Cookie 要删除身证认证cookie, ...
- IdentityServer Topics(5)- 使用第三方登录
ASP.NET Core有一个灵活的方式来处理外部认证. 这包括几个步骤. 如果您使用的是ASP.NET Identity,则许多底层技术细节对您而言都是隐藏的. 建议您还阅读Microsoft文档并 ...
- IdentityServer Topics(1)- 启动说明
启动 IdentityServer的启动是中间件和服务的组合来实现的. 所有配置都在你的启动类(Startup.cs)中完成. 配置服务 通过以下方式调用将IdentityServer服务添加到DI系 ...
- IdentityServer Topics(3)- 定义客户端
客户端代表可以从您的身份服务器请求令牌的应用程序. 细节有所不同,但您通常为客户端定义以下常用设置: 一个唯一的客户端ID 一个密钥,如果需要 允许与令牌服务的交互(称为授权类型) 身份或访问令牌被发 ...
- IdentityServer Topics(6)- Windows身份验证
在支持的平台上,您可以让IdentityServer使用Windows身份验证(例如,对Active Directory)对用户进行身份验证. 当您使用以下身份托管IdentityServer时,当前 ...
- IdentityServer Topics(2)- 定义资源
您通常在系统设计中的第一件事就是您要保护的资源. 这可能是您的用户的身份信息,如个人资料数据或电子邮件地址,或访问API. 您可以使用C#对象模型定义资源(硬编码),或从数据存储中加载它们. IRes ...
- 基于IdentityServer4的单点登录——Client
以MvcClient项目为例 1.新建项目并添加引用 新建一个asp .net core 2.0的项目引用IdentityModel 2.配置 比之前的控制台客户端多这个步骤,需要配置这个客户端的Cl ...
- IdentityServer4-主题
一.Startup 二.定义Resources 三.定义Clients 四.登录 五.使用外部身份提供商登录 六.Windows身份验证 七.登出 八.注销外部身份提供商 九.联合注销 十.联合网关 ...
- 【总】IdentityServer4 32篇汇总
随笔分类 - IdentityServer4 IdentityServer4 常见问题 - 用户拒绝授权后报错 摘要: 1.问题说明 在 IdentityServer4 Web 授权中,一般会有一个显 ...
随机推荐
- ABP框架 - 规约
文档目录 本节内容: 简介 示例 创建规约类 在仓储里使用规约 组合规约 讨论 何时使用 何时不用 简介 规约模式是一个特别的软件设计模式,业务逻辑可以使用boolean逻辑重新链接业务逻辑(维基百科 ...
- IntelliJ IDEA 环境常用设置整理
1.修改为Eclipse快捷键 File -> Settings -> Keymap => Keymaps改为 Eclipse copy 2.显示行号: File -> S ...
- CentOS openssh升级至7.4版本
1.原环境: cat /etc/issue CentOS release 6.5 (Final) ssh -V OpenSSH_7.3p1, OpenSSL 1.0.1e-fips 11 Feb 20 ...
- 【python】递归(阶乘、斐波纳契、汉诺塔)
- Docker Stack 集群部属服务
Docker越来越成熟,功能也越来越强大.使用Dokcer Stack做服务集群也是非常的方便,docker 自己就提供了负载功能,感觉很方便,就想给大家分享一下,做一个简单的教程. 环境 我是用了两 ...
- ABP .Net Core 部署到IIS 问题汇总
在ABP官网创建一个.Net Core项目编译完成 1. 发布网站 2. IIS新建站点 目录指向发布的目录 3.安装WindowsHosting IIS安装服务器上安装DotNetCore.X.X. ...
- Java多线程之赛跑游戏
在JavaSE中,多线程是一个重要的内容. 我们要了解多线程的概念,就要先了解进程的概念:要了解进程的概念,就离不开操作系统的概念. 在一台正常运行的电脑中,计算机硬件(如CPU.内存.硬盘.网卡.显 ...
- stack 的优势 - 每天5分钟玩转 Docker 容器技术(113)
stack 将应用所包含的 service,依赖的 secret.voluem 等资源,以及它们之间的关系定义在一个 YAML 文件中.相比较手工执行命令或是脚本,stack 有明显的优势. YAML ...
- webpack配置报错:invalid configuration object.webpack has been initialisted using a configuration objcet that does not match thie API schema
最近接收了别人的项目,webpack配置总是报错如下:最后找到了解决办法,在此分享一下: 错误情况: 解决办法: 将package.json里面的colors删除掉即可
- Python之禅及释义
在python shell中敲 import this会触发一个彩蛋,神奇的打印下面一段话: The Zen of Python, 即python之禅, 1999年Tim Peters大牛总结的&qu ...