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做了一个登陆注册,大概是可以窥 ...
随机推荐
- python 基本数据类型--字符串实例详解
字符串(str) :把字符连成串. 在python中⽤', ", ''', """引起来的内容被称为字符串 . 注意:python中没有单一字符说法,统一称叫字 ...
- git 使用及常用命令介绍
一.git 常用命令 git clone 地址 克隆项目 git status 查看当前状态 git add 文件或文件夹 (加入本地暂存目录) git commit -m "注释" ...
- C - 继续畅通工程 最小生成树
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经 ...
- python之常用模块(续)
time模块 random模块 sys模块 os模块 序列化模块 time模块 有三种方式表示 在Python中,通常有三种方式来表示时间:时间戳.元组(struct_time).格式化的时间字符串 ...
- 使用Eclipse打jar包 包含依赖jar包
1.在项目根目录新建MANIFEST.MF文件 //版本号 Manifest-Version: 1.0 //依赖jar包路径 多个用空格隔开 Class-Path: lib/commons-loggi ...
- 路飞学城-Python开发集训-第3章
学习心得: 通过这一章的作业,使我对正则表达式的使用直接提升了一个level,虽然作业完成的不怎么样,重复代码有点多,但是收获还是非常大的,有点找到写代码的感觉了,遗憾的是,这次作业交过,这次集训就结 ...
- 08 python 初学(字典)
字典是 python 中唯一的映射类型 .采用键值对(key-value)的形式存储数据. python 对 key 进行哈希函数运算,根据计算的结果决定 value 的存储地址,所以字典时无需存储的 ...
- day22 Pythonpython 本文xml模块
一.xml介绍 xml是实现不同语言或者程序直接进行数据交换的协议,跟json差不多,单json使用起来更简单.不过现在还有很多传统公司的接口主要是xml xml跟html都是标签语言 我们主要学习的 ...
- ORA-00600: internal error code, arguments: [2662]
转自 http://www.eygle.com/archives/2005/12/oracle_diagnostics_howto_deal_2662_error.html 在ORA-00600 22 ...
- 二:vlan,gre,vxlan
管理网络:包含api网络(public给外部用,admin给管理员用-是内部ip,internal给内部用-是内部ip) 数据网络 存储网络 IDRAC网络 PXE网络 控制节点相关服务 system ...