IdentityServer4【Topic】之登陆注册
Sign-in 登陆注册
为了让标识服务器(identity server)代表用户发出令牌,该用户必须登录到标识服务器。
Cookie authentication Cookie认证
身份验证是由来自ASP.NET Core的cookie认证处理程序(cookie authentication handler)管理的cookie进行跟踪的。
IdentityServer注册了两个cookie处理程序(一个用于认证会话,另一个用于零时外部cookie)。这些都是默认使用的,并且如果你想手动的引用他们的话你可以通过IdentityServerConstants类(DefaultCookieAuthenticationScheme和ExternalCookieAuthentication Scheme)来获取他们的名字。
对于这些Cookies,我们只暴露了一些基本的设置,如果你想要更多的控制,你可以注册你自己的cookie handler。当使用来自ASP.NET Core的AddAuthentication时,身份服务器使用任何在DefaultAuthenticationOptions中配置的DefaultAuthenticateScheme相匹配的cookie处理程序。
Overriding cookie handler configuration重写cookie handler的配置
如果你希望使用你自己的cookie authentication handler,你得自己去配置。这个工作是在ConfigureSerrvice中完成的,在AddIdentityServer扩展方法之后你可以链式的添加你的配置:
services.AddIdentityServer()
.AddInMemoryClients(Clients.Get())
.AddInMemoryIdentityResources(Resources.GetIdentityResources())
.AddInMemoryApiResources(Resources.GetApiResources())
.AddDeveloperSigningCredential()
.AddTestUsers(TestUsers.Users);
//在这里配置你自己的cookie authentication handler
services.AddAuthentication("MyCookie")
.AddCookie("MyCookie", options =>
{
options.ExpireTimeSpan = ...;
});
需要注意的是IdentityServer在内部已经调用了AddAuthentication和AddCookie这两个方法,根据asp.net core的DI原则,你必须在AddIdentityServer之后注册你自己的handler,这样才会生效(添加相同的服务时,最后一个才会生效,除非你调用GetServices这个复数的版本。。。)
Login User Interface and Identity Management System 登陆用户接口\界面和身份管理系统
身份验证服务器不提供用户身份验证的用户接口或界面或用户数据库。这些得你自己提供。
如果你想要一个基本的界面(例如登陆、登出、用户确认界面和管理授权),你可以使用IdentityServer4i提供的quickstart UI.
quickstart UI使用内存中的存储来应付用户的认证,你可以把这部分替换成你的真实的用户库。这里有一个使用ASP.NET Identity的例子
Login Workflow 登陆的工作流程
当IdentityServer在authorization endpoint(identityserver中定义的一个端点)接收到一个请求,但是这时用户还没有被认证,那么这个用户将被重定向到预先配置好的登陆界面。你必须通过UserInteraction这个设置项(默认是/account/login)告知IdentityServer如何到达登陆页,例如下面这样:
services.AddIdentityServer(option =>
{
option.UserInteraction.LoginUrl = "Account/Login"; });
一个returnUrl参数将被传递用来告诉登陆页面当登陆完成时用户应该被重定向到哪里。
要注意通过returnUrl参数带来的open-redirect attacks(开放重定向攻击)。你应该检查returnURl是否指向了一个已知(well-known)的位置。查看interaction service获取更多的资料。
Login Context 登陆上下文
在登录页上你可能想要获取一些关于请求的上下文信息以便你可以定制登陆的一些体验(比如客户端信息、提示参数、Idp提示或者其他的信息)。这些上下文的信息是通过interaction service的GetAuthorizationContextAsync方法来实现的。
Issuing a cookie and Claims 发布cookie和Claim
在Asp.net core中的HttpContext上有一些关于认证方面的扩展方法,用来发布cookie和登陆。认证方案(authentication scheme,用来标识一个authentication handler)在使用上必须与cookie handler(cookie认证处理程序)匹配。
当让一个用户登陆时,最基本的要求是你得给该用户颁发一个sub claim和一个name claim。IdentityServer也提供了一些SigninAsync扩展方法以便让这项工作更便利。
你还可以选择性地颁发idp claim(对于身份提供者名称)、amr claim(用于使用的认证方法)和/或auth_time claim(对于用户验证的时间)。如果你不提供这些,那么身份服务器将会提供一些默认值。
IdentityServer4【Topic】之登陆注册的更多相关文章
- Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)
写在最前: 在实际开发中,相信每个项目都会有用户登陆注册功能,这个实现的方法很多,下面是我实现的方法,供大家交流. 新人发帖,万分紧张,怎么样才能装作一副经常发帖的样子不被别人看出来呢-,- ? 好了 ...
- java 24 - 11 GUI之制作登陆注册页面
简单说说,懒得发了... 步骤: A:首先写出登陆注册需要用到类以及代码(IO流) B:然后创建登陆窗口和注册窗口 C:各个监听事件: a:登录窗口 1.重置:把2个文本框的内容全部清空 2.注册:关 ...
- PHP数据库登陆注册简单做法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- javaweb 登陆注册页面
视图的数据修改,表中也修改引用工具类用<%@ page import=""%> <%@ page import="java.util.Date" ...
- 用户登陆注册【JDBC版】
前言 在讲解Web开发模式的时候,曾经写过XML版的用户登陆注册案例!现在在原有的项目上,使用数据库版来完成用户的登陆注册!如果不了解的朋友,可以看看我Web开发模式的博文! 本来使用的是XML文件作 ...
- 用ajax的同步请求解决登陆注册需要根据服务器返回数据判断是否能提交的问题
最近在写www.doubilaile.com的登陆注册.需要用ajax请求服务器判断用户名是否存在,用户名和密码是否匹配,进而提交数据.碰到的问题是异步请求都能成功返回数据,但是该数据不能作为紧接着的 ...
- tkinter 创建登陆注册界面
import tkinter as tk from tkinter import messagebox #设置窗口居中 def window_info(): ws = window.winfo_scr ...
- 《java入门第一季》模拟用户登陆注册案例集合版
需求:校验用户名和密码,登陆成功后玩猜数字小游戏. 在这里先写集合版.后面还有IO版.数据库版. 一.猜数字小游戏类: 猜数字小游戏的代码见博客:http://blog.csdn.net/qq_320 ...
- 三篇文章带你极速入门php(三)之php原生实现登陆注册
看下成果 ps:纯天然h5,绝不添加任何添加剂(css)以及化学成分(js)(<( ̄ ﹌  ̄)我就是喜欢纯天然,不接受任何反驳) 关于本文 用原生的php和html做了一个登陆注册,大概是可以窥 ...
随机推荐
- S/4 HANA中的MATDOC和MATDOC_EXTRACT
最近做了销售和物料管理方面的一些需求,因此对S/4中的MM的数据模型有了一定的了解.目前网络已经有一些介绍物料凭证表MATDOC的文章,内容好像不是很详细,另外也没发现介绍库存变更数据表MATDOC_ ...
- CSS 浮动(float)与定位(position)
一.浮动 1.三个属性:left.right.none. 2.特点:容易造成父项塌陷,故在父项需要清除浮动 3.父项塌陷现象 4.父项塌陷解决方案(建议使用):清除浮动 .parent:after{ ...
- 高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南
原文:http://my.oschina.net/wstone/blog/365010#OSC_h3_13 (WJW)高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南 [X] ...
- nuxt框架Universal和Spa两种render mode的区别
如下图,官网上对于Universal 和 Spa 两种render mode的区别,并没有加以说明,相信大多数人跟我一样有点懵,不知道选什么好.虽然两个模式创建的项目看不出区别. 先给出推荐选项: U ...
- SpringBoot2.0 最简单的 idea 快速创建项目
第一步 第二步 第三步 以上就是idea快速创建springboot的方法,创建之后等maven 依赖下载完成,就可以使用
- C#中Request.ServerVariables详细说明及代理
Request.ServerVariables("Url") 返回服务器地址 Request.ServerVariables("Path_Info") 客户端提 ...
- spring Environment
Environment 环境在容器中是一个抽象的集合,是指应用环境的2个方面: profiles和 properties. profile 配置是一个被命名的,bean定义的逻辑组,这些bean只有在 ...
- [Algorithm] 如何正确撸<算法导论>CLRS
其实算法本身不难,第一遍可以只看伪代码和算法思路.如果想进一步理解的话,第三章那些标记法是非常重要的,就算要花费大量时间才能理解,也不要马马虎虎略过.因为以后的每一章,讲完算法就是这样的分析,精通的话 ...
- DNS原理-HTTP原理-TCP原理
第一章:企业DNS原理 相信大家都知道windows和linux的hosts文件是:IP地址和域名的对应关系,我们一般访问网站的步骤: 打开网页-----输入网址-------查看本地的DNS库是否存 ...
- Linux—日志查看(测试人员)
备注:在筛选语句后面加“--col”可以高亮显示查询结果中的关键字 cd /home/admin/logs/服务器名 #进入日志目录(错误日志文件:common-error.log),路径因公司而定 ...