第21章 登录 - Identity Server 4 中文文档(v1.0.0)
为了使IdentityServer能够代表用户发出令牌,该用户必须登录IdentityServer。
21.1 Cookie身份验证
使用由ASP.NET Core中的cookie身份验证处理程序管理的cookie来跟踪身份验证。
IdentityServer注册了两个cookie处理程序(一个用于身份验证会话,另一个用于临时外部cookie)。默认情况下使用它们,如果要手动引用它们,可以从IdentityServerConstants
类(DefaultCookieAuthenticationScheme
和ExternalCookieAuthenticationScheme
)中获取它们的名称。
我们只公开这些cookie的基本设置(到期和滑动),如果您需要更多控制,您可以注册自己的cookie处理程序。当使用ASP.NET Core中的AddAuthentication
时,IdentityServer使用与AuthenticationOptions
上配置的DefaultAuthenticateScheme
匹配的cookie处理程序。
21.2 覆盖cookie处理程序配置
如果您希望使用自己的cookie身份验证处理程序,则必须自己配置它。这必须在ConfigureServices
DI(AddIdentityServer
)中注册IdentityServer之后完成。例如:
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
)调用AddAuthentication
和AddCookie
,因此要覆盖它们,您必须在AddIdentityServer
之后进行相同的调用。
21.3 登录用户界面和身份管理系统
IdentityServer不为用户身份验证提供任何用户界面或用户数据库。 这些是您希望自己提供或开发的东西。
如果您需要基本UI的起点(登录,注销,同意和管理授权),您可以使用我们的快速入门UI。
快速入门UI针对内存数据库对用户进行身份验证。 您可以通过访问真实用户存储来替换这些位。 我们有使用ASP.NET Identity的示例。
21.4 登录工作流程
当IdentityServer在授权端点收到请求且未对用户进行身份验证时,将用户重定向到已配置的登录页面。 您必须通过选项上的UserInteraction
设置(默认/account/login
)通知IdentityServer登录页面的路径。 将传递returnUrl
参数,通知您的登录页面,一旦登录完成,应该重定向用户。
注意
通过returnUrl
参数注意open-redirect attacks攻击。 您应该验证returnUrl
是否引用了众所周知的位置。 请参阅API的交互服务以验证returnUrl
参数。
21.5 登录上下文
在您的登录页面上,您可能需要有关请求上下文的信息,以便自定义登录体验(例如客户端,提示参数,IdP提示或其他内容)。这可以通过交互服务上的GetAuthorizationContextAsync
API获得。
21。6 发行cookie和声明
ASP.NET Core上的HttpContext
上有与身份验证相关的扩展方法,用于发出身份验证cookie并对用户进行签名。使用的身份验证方案必须与您正在使用的cookie处理程序匹配(请参见上文)。
当您签署用户时,您必须至少发出一个sub
和一个name
声明。 IdentityServer还在HttpContext
上提供了一些SignInAsync
扩展方法,以使这更方便。
您还可以选择发出idp
声明(针对身份提供者名称),amr
声明(针对所使用的身份验证方法)和/或auth_time
声明(针对用户身份验证的纪元时间)。如果您不提供这些,IdentityServer将提供默认值。
第21章 登录 - Identity Server 4 中文文档(v1.0.0)的更多相关文章
- 第18章 启动 - Identity Server 4 中文文档(v1.0.0)
IdentityServer是中间件和服务的组合.所有配置都在您的启动类中完成. 18.1 配置服务 您可以通过调用以下方法将IdentityServer服务添加到DI系统: public void ...
- 第22章 使用外部身份提供商登录 - Identity Server 4 中文文档(v1.0.0)
ASP.NET Core有一种灵活的方式来处理外部身份验证.这涉及几个步骤. 注意 如果您使用的是ASP.NET Identity,则会隐藏许多基础技术细节.建议您还阅读Microsoft 文档并执行 ...
- 第2章 术语 - Identity Server 4 中文文档(v1.0.0)
规范.文档和对象模型等都使用特定的术语来表述. 2.1 IdentityServer IdentityServer是OpenID Connect提供程序 - 它实现OpenID Connect和OAu ...
- 第66章 视频 - Identity Server 4 中文文档(v1.0.0)
第66章 视频 66.1 2019 January [NDC] - 使用ASP.NET Core 2.2和3.0保护Web应用程序和API 1月[NDC] - 为基于OpenID Connect / ...
- 第41章 CORS - Identity Server 4 中文文档(v1.0.0)
第41章 CORS IdentityServer中的许多端点将通过基于JavaScript的客户端的Ajax调用进行访问.鉴于IdentityServer最有可能托管在与这些客户端不同的源上,这意味着 ...
- 第32章 事件 - Identity Server 4 中文文档(v1.0.0)
日志记录是更低级别的"printf"样式 - 事件代表有关IdentityServer中某些操作的更高级别信息.事件是结构化数据,包括事件ID,成功/失败信息,类别和详细信息.这使 ...
- 第24章 退出 - Identity Server 4 中文文档(v1.0.0)
注销IdentityServer就像删除身份验证cookie一样简单,但是为了完成联合注销,我们必须考虑将用户从客户端应用程序(甚至可能是上游身份提供者)中签名. 24.1 删除认证 要删除身份验证c ...
- 第1章 背景 - Identity Server 4 中文文档(v1.0.0)
大多数现代应用程序或多或少看起来像这样: 最常见的互动是: 浏览器与Web应用程序通信 Web应用程序与Web API进行通信(Web应用程序自身 或 代表用户 与 Web API 通信) 基于浏览器 ...
- 第64章 学习 - Identity Server 4 中文文档(v1.0.0)
以下是一些在线,远程和课堂培训选项,以了解有关ASP.NET Core Identity和IdentityServer4的更多信息. 64.1 现代应用程序的身份和访问控制(使用ASP.NET Cor ...
随机推荐
- [LeetCode] Maximize Distance to Closest Person 离最近的人的最大距离
In a row of seats, 1 represents a person sitting in that seat, and 0 represents that the seat is emp ...
- Java后台使用Websocket教程
在开发一个项目的时候使用到了WebSocket协议 什么是WebSocket? WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在WebSocket A ...
- K8S 安装 Wordpress
基本概念 Helm 可以理解为 Kubernetes 的包管理工具,可以方便地发现.共享和使用为Kubernetes构建的应用,它包含几个基本概念 Helm是目前Kubernetes服务编排领域的唯一 ...
- 3.ifconfig
Windows下查看IP地址用ipconfig Linux 下查看IP地址用ifconfig 还有 ip addr 而ipconfig 和ip addr的区别则是与net-tools工具和i ...
- 服务器Windows 登录 出现401 错误
Method 1: Disable the loopback checkThe first method is to disable the loopback check by setting th ...
- for循环语句/命名函数
for(1.表达式1;2.表达式2;3.表达式3){ 4.循环体语句; } 先执行1,在执行2表达式,如果2的表达式为false的话直接退出循环, 如果2的表达式结果为true,执行4,执行3,执行2 ...
- js-day06-jQuery事件和DOM操作-练习题
jQuery事件绑定 js中绑定事件,三种方式: 方式1: 直接在元素上,增加onXxx事件属性. <button onclick="alert(1);">点我< ...
- ubuntu Nvidia driver install
在图形界面中,有软件和更新,可以使用附加驱动来更新 最上面的驱动是最新版本,英伟达目前Linux最新的版本是375.39 后面的括号,专有意思是代表英伟达自家的驱动,不开源 选择好之后点击应用更改 关 ...
- 【RL-TCPnet网络教程】第16章 UDP用户数据报协议基础知识
第16章 UDP用户数据报协议基础知识 本章节为大家讲解UDP(User Datagram Protocol,用户数据报协议),需要大家对UDP有个基础的认识,方便后面章节UDP实战操作. ...
- Redis sortedset实现元素自动过期
这里的自动过期,Redis并没有提供相应的api,但是可以使用一下方法来实现. 需求背景: 给用户返回的文章要求七日内不能重复:文章是存放在java list里边:(这一块就是从db将文章拿出来,然后 ...