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. Maven中POM.XML详解

    转自https://blog.csdn.net/jariwsz/article/details/19554137 我们先看一个简单的例子: <project xmlns="http:/ ...

  2. Teradata全面转型

    大数据时代 Teradata全面转型 [关键点]:数据分析相关技术和方案==>帮助企业实现数据价值变现 1.所有企业达成共识 数据已经成为企业的资产,甚至是核心资产. 2.Teradata转型 ...

  3. C#基础知识之托管代码和非托管代码

    什么是托管代码(managed code)? 托管代码(Managed Code)就是中间语言(IL)代码,在公共语言运行库(CLR)中运行.编译器把代码编译成中间语言,当方法被调用时,CLR把具体的 ...

  4. 如何学习sss和前端数据处理

    1.学习scss,就看这篇:http://www.ruanyifeng.com/blog/2012/06/sass.html 就够了,因为sass的出现本来就是为了简化工作提高效率,也不算什么深奥精妙 ...

  5. SpringMVC handleMapping映射过程

    初始化IOC容器 Spring初始化的时候会优先初始化自定义的类,下面这个就是 org.springframework.web.servlet.mvc.method.annotation.Reques ...

  6. UVA1627-Team them up!(动态规划)

    Problem UVA1627-Team them up! Total Submissions:3577  Solved:648 Time Limit: 3000 mSec Problem Descr ...

  7. Jenkins以root用户运行的方法

    以centOS系统为例,记录下修改Jenkins以root用户运行的方法. 修改Jenkins配置文件 # 打开配置文件 vim /etc/sysconfig/jenkins # 修改$JENKINS ...

  8. P1515 旅行(简单搜索)

    非常简单的搜索. 思路:先排序,然后,搜索枚举的时候满足A < 两个旅店 < B,然后,搜索就行了. #include<iostream> #include<algori ...

  9. 分区默认segment大小变化(64k—>8M)

    _partition_large_extents和_index_partition_large_extents 参考: http://www.xifenfei.com/2013/08/%E5%88%8 ...

  10. APP耗电量测试

    现象 APP耗电,导致电池续航能力不佳,如下图,在小米MIX2和iPhone X机型上后台静默一小时各应用的耗电排行: 基本概念 相对于PC来说,移动设备的电池电量是非常有限的,保持持久的续航能力尤为 ...