用户必须进行登录,才能够让 IdentityServer 发出 Token

一.Cookie认证

使用 ASP.NET Core 的 Cookie 认证(传送门

IdentityServer 注册了两个cookie处理程序(一个用于身份验证会话,另一个用于临时的外部cookie)。 它们默认使用,如果你想手动引用它们,您可以从IdentityServerConstants类(DefaultCookieAuthenticationSchemeExternalCookieAuthenticationScheme)获取它们的名称。

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)调用AddAuthenticationAddCookie,因此要覆盖它们,必须在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)- 登录的更多相关文章

  1. IdentityServer Topics(7)- 注销

    注销IdentityServer与删除身份cookie一样简单,但是我们必须考虑将用户从客户端应用程序(甚至可能是上游身份提供程序)中注销. 一.删除身份认证Cookie 要删除身证认证cookie, ...

  2. IdentityServer Topics(5)- 使用第三方登录

    ASP.NET Core有一个灵活的方式来处理外部认证. 这包括几个步骤. 如果您使用的是ASP.NET Identity,则许多底层技术细节对您而言都是隐藏的. 建议您还阅读Microsoft文档并 ...

  3. IdentityServer Topics(1)- 启动说明

    启动 IdentityServer的启动是中间件和服务的组合来实现的. 所有配置都在你的启动类(Startup.cs)中完成. 配置服务 通过以下方式调用将IdentityServer服务添加到DI系 ...

  4. IdentityServer Topics(3)- 定义客户端

    客户端代表可以从您的身份服务器请求令牌的应用程序. 细节有所不同,但您通常为客户端定义以下常用设置: 一个唯一的客户端ID 一个密钥,如果需要 允许与令牌服务的交互(称为授权类型) 身份或访问令牌被发 ...

  5. IdentityServer Topics(6)- Windows身份验证

    在支持的平台上,您可以让IdentityServer使用Windows身份验证(例如,对Active Directory)对用户进行身份验证. 当您使用以下身份托管IdentityServer时,当前 ...

  6. IdentityServer Topics(2)- 定义资源

    您通常在系统设计中的第一件事就是您要保护的资源. 这可能是您的用户的身份信息,如个人资料数据或电子邮件地址,或访问API. 您可以使用C#对象模型定义资源(硬编码),或从数据存储中加载它们. IRes ...

  7. 基于IdentityServer4的单点登录——Client

    以MvcClient项目为例 1.新建项目并添加引用 新建一个asp .net core 2.0的项目引用IdentityModel 2.配置 比之前的控制台客户端多这个步骤,需要配置这个客户端的Cl ...

  8. IdentityServer4-主题

    一.Startup 二.定义Resources 三.定义Clients 四.登录 五.使用外部身份提供商登录 六.Windows身份验证 七.登出 八.注销外部身份提供商 九.联合注销 十.联合网关 ...

  9. 【总】IdentityServer4 32篇汇总

    随笔分类 - IdentityServer4 IdentityServer4 常见问题 - 用户拒绝授权后报错 摘要: 1.问题说明 在 IdentityServer4 Web 授权中,一般会有一个显 ...

随机推荐

  1. 如何在华为云软件开发云上搭建JavaWeb,Maven项目

    本文将使用华为云软件开发云向大家演示如何搭建JavaWeb,Maven项目. 一.相关信息 1.华为云软件开发云简介 华为云软件开发云(DevCloud)是集华为近30年研发实践,前沿研发理念,先进研 ...

  2. 【JavaScript】 JS面向对象的模式与实践 (重点整治原型这个熊孩子 (/= _ =)/~┴┴ )

    参考书籍 <JavaScript高级语言程序设计>—— Nicholas C.Zakas <你不知道的JavaScript>  —— KYLE SIMPSON   在JS的面向 ...

  3. IntelliJ IDEA创建java项目

    IntelliJ IDEA创建java项目 进入到IntelliJ IDEA启动界面,点击Create New Project 2.这样就进入到了创建项目页面,这里可以创建好多项目,这里我们以java ...

  4. Eclipse中Spring插件的安装

    java中为了方便学习使用SSH框架,框架插件的安装是非常必要的. 本博文记录了自己安装Spring插件的过程: 本机环境:win8 64bit eclipse版本:4.5.2 MARS 插件版本:S ...

  5. java 正则学习

    前言 在网上找了许多关于正则解析 URL,结果不是很满意,所以自己学习正则: java url 那么解析 url 的代码如下: import java.util.regex.Matcher; impo ...

  6. 1. 生成三行文本,过滤文本,cp不覆盖,find查找文件,sed打印行,查看系统信息,磁盘分区

  7. 53、css补充

    css其余问题补充 一.默认的高度和宽度问题 1.父子都是块级元素 <!DOCTYPE html> <html> <head> <title>...&l ...

  8. iOS 上线因iPv6被拒,查询服务器是否支持iPv6,mac设置iPv6网络,手机测试iPv6

    一. iOS----如何检查域名是否支持ipv6 iOS----------如何检查域名是否支持ipv6 1.检查你所用到的库,像af 3.0以上什么的(不用改),其他的库自己去搜下是否支持ipv6吧 ...

  9. iOS 数据加密方案

    iOS安全攻防(二十三):Objective-C代码混淆 提交用户的隐私数据 一定要使用POST请求提交用户的隐私数据GET请求的所有参数都直接暴露在URL中请求的URL一般会记录在服务器的访问日志中 ...

  10. JS画几何图形之一【直线】

    JS画图的想法经过大脑的时候,觉得有点意思,所以就实践了一番.JS画图为系列文章,本是讲点.线和面 先看样例:http://www.zhaojz.com.cn/demo/draw5.html 一.点 ...