IdentityServer Topics(4)- 登录

为了使IdentityServer代表用户发布令牌,该用户必须登录到IdentityServer。

Cookie认证

使用来自ASP.NET Core的cookie身份验证处理程序管理的cookie跟踪身份验证。

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

我们只公开这些cookies的基本设置(过期和滑动),如果你需要更多的控制,你可以注册你自己的cookie处理程序。 当使用来自ASP.NET Core的AddAuthentication时,IdentityServer使用与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不提供任何用户界面或用户数据库进行用户认证。 这些是你期望提供或发展自己的东西。

如果您需要基本用户界面(登录,注销,同意和管理授权)的起点,则可以使用我们的快速入门界面。

快速入门的用户界面根据内存数据库对用户进行认证。 你想取代这些那么请使用你的真实用户存储。 我们有使用ASP.NET Identity的示例。

登录工作流程

当IdentityServer在授权端点收到请求,且用户没有通过认证时,用户将被重定向到配置的登录页面。 您必须通过设置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和身份单元

在ASP.NET Core的HttpContext上有与身份验证相关的扩展方法来发布身份验证cookie并签署用户。所使用的身份验证方案必须与您正在使用的cookie处理程序(请参阅上文)匹配。

当用户登录时,你必须至少发出一个子sub身份单元和一个name身份单元。 IdentityServer还在HttpContext上提供了一些SignInAsync扩展方法,以使这更方便。

您还可以选择发出idp身份单元(针对身份提供者名称),amr声明(针对使用的身份验证方法)或者auth_time声明(针对用户认证的认证时间)。 如果您不提供这些,IdentityServer将提供默认值。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张戈的专栏

[不定期更新]简单的shell脚本练习实例

此文将整理一些简单实用、有趣易学的 shell 练习脚本,希望可以帮到一些想学习 shell 的初学者。张戈也会在闲暇时间不定期更新此文,对已有实例进行改进和注...

3523
来自专栏章鱼的慢慢技术路

DirectX using C++_error X3539:ps1_x is no longer supported...解决方案

或者是在D3DXCompileShaderFromFile函数中将对应的ps_1_1改为ps_2_0

482
来自专栏钟绍威的专栏

restful是什么非restful的开发方式restful的开发方式

resful是什么 rest是一种开发的风格,他不是框架,也没有类库,是一种约定 有什么不同 非restful的开发方式 当没有接触restful的时候,URL...

1867
来自专栏听雨堂

JS实现页面跳转

框架中,处理完后,要刷新左页面,同时本页面也要跳转到另一个页面。刷新用 <body onload="parent.leftFrame.location.rel...

1936
来自专栏性能与架构

MongoDB 多对多关系的简单示例

例如文章的标签,一篇文章可能包含多个标签,一个标签也会对应多篇文章 这是一个多对多的映射关系,在sql中我们一般这样设计 Article: Id ...

3117
来自专栏蛋未明的专栏

网页实现批量数据导入功能

1552
来自专栏刺客博客

PHP登陆使用验证码判断

1746
来自专栏编程札记

MQ对比之RabbitMQ &Redis

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

1113
来自专栏技术博客

设计模式之十(外观模式)

外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一系统更加容易使用.

592
来自专栏张善友的专栏

SQL Server 2008 Service Broker

SQL Server Service Broker 为消息和队列应用程序提供 SQL Server 数据库引擎本机支持。这使开发人员可以轻松地创建使用数据库引擎...

1827

扫码关注云+社区