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】之登陆注册的更多相关文章

  1. Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)

    写在最前: 在实际开发中,相信每个项目都会有用户登陆注册功能,这个实现的方法很多,下面是我实现的方法,供大家交流. 新人发帖,万分紧张,怎么样才能装作一副经常发帖的样子不被别人看出来呢-,- ? 好了 ...

  2. java 24 - 11 GUI之制作登陆注册页面

    简单说说,懒得发了... 步骤: A:首先写出登陆注册需要用到类以及代码(IO流) B:然后创建登陆窗口和注册窗口 C:各个监听事件: a:登录窗口 1.重置:把2个文本框的内容全部清空 2.注册:关 ...

  3. PHP数据库登陆注册简单做法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. javaweb 登陆注册页面

    视图的数据修改,表中也修改引用工具类用<%@ page import=""%> <%@ page import="java.util.Date" ...

  5. 用户登陆注册【JDBC版】

    前言 在讲解Web开发模式的时候,曾经写过XML版的用户登陆注册案例!现在在原有的项目上,使用数据库版来完成用户的登陆注册!如果不了解的朋友,可以看看我Web开发模式的博文! 本来使用的是XML文件作 ...

  6. 用ajax的同步请求解决登陆注册需要根据服务器返回数据判断是否能提交的问题

    最近在写www.doubilaile.com的登陆注册.需要用ajax请求服务器判断用户名是否存在,用户名和密码是否匹配,进而提交数据.碰到的问题是异步请求都能成功返回数据,但是该数据不能作为紧接着的 ...

  7. tkinter 创建登陆注册界面

    import tkinter as tk from tkinter import messagebox #设置窗口居中 def window_info(): ws = window.winfo_scr ...

  8. 《java入门第一季》模拟用户登陆注册案例集合版

    需求:校验用户名和密码,登陆成功后玩猜数字小游戏. 在这里先写集合版.后面还有IO版.数据库版. 一.猜数字小游戏类: 猜数字小游戏的代码见博客:http://blog.csdn.net/qq_320 ...

  9. 三篇文章带你极速入门php(三)之php原生实现登陆注册

    看下成果 ps:纯天然h5,绝不添加任何添加剂(css)以及化学成分(js)(<( ̄ ﹌  ̄)我就是喜欢纯天然,不接受任何反驳) 关于本文 用原生的php和html做了一个登陆注册,大概是可以窥 ...

随机推荐

  1. SpringCloud之初识Feign ----- 分布式负载自动拼接请求的URL

    在前面的学习中,我们使用了Ribbon的负载均衡功能,大大简化了远程调用时的代码: String baseUrl = "http://user-service/user/"; Us ...

  2. wangedit

    <template> <el-row id="AddRoom"> <el-col :span="5">.</el-co ...

  3. centos7下kubernetes(6。kubernetes创建资源的两种方式)

    两种方式:1.命令:2.配置文件 之前我们在部署K8S的时候分别用到了命令和配置文件创建K8s资源: 1.命令方式:kubectl run nginx-deployment --image=nginx ...

  4. CSS--position:relative和position:absolute

    position:relative相对定位 1. 如何定位?每个元素在页面的普通流中会“占有”一个位置,这个位置可以理解为默认值,而相对定位就是将元素偏离元素的默认位置,但普通流中依然保持着原有的默认 ...

  5. 史上最简单的springboot国际化多语言切换实现方案

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 前提: 在resources目录下建立 messages_en_US.properti ...

  6. 微信硬件平台(一) 公众号 ESP8266 Arduino LED

    微信硬件平台 本文目的,使用微信公众号控制ESP8266的LED开和关.进一步使用微信当遥控器(避免写APP或者IOS或者小程序),控制一切设备.给两个关键的总教程参考. 官网教程  微信硬件平台 微 ...

  7. python实现命令行解析的argparse的使用

    参考https://docs.python.org/3.6/library/argparse.html argparse模块使编写用户友好的命令行界面变得很容易.程序定义了它需要什么参数,argpar ...

  8. 吴恩达课后作业学习1-week4-homework-two-hidden-layer -1

    参考:https://blog.csdn.net/u013733326/article/details/79767169 希望大家直接到上面的网址去查看代码,下面是本人的笔记 两层神经网络,和吴恩达课 ...

  9. Linux 系统负载查询及分析说明

    Linux 系统出现死机或卡顿时,可以参阅如下步骤进行整体排查: 检查服务器进程与服务否占用了过多内存,或者内存没有正常释放,导致出现内存溢出,系统宕机. 检查 /var/spool/cron 等系统 ...

  10. falcon常用参数解析

    CPU.xxx cpu.idle cpu.idle表示除硬盘IO等待时间以外其它等待时间,这个值越大,表示cpu越空闲,还可以执行更多的任务,反之亦然,此处我们falcon展示的是idle的波动情况, ...