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 条评论
登录 后参与评论

相关文章

来自专栏KaliArch

Kubernetes+Prometheus+Grafana部署笔记

Kubernetes(通常写成“k8s”)Kubernetes是Google开源的容器集群管理系统。其设计目标是在主机集群之间提供一个能够自动化部署、可拓展、应...

2184
来自专栏晓晨的专栏

Docker for Windows 使用 VMware WorkStation

3662
来自专栏林德熙的博客

git镜像仓库

有时候我们会把一些仓库放到本地,当他更新的时候,可以使用简单命名更新他。 不是所有时间我们都有网,所以把远程的仓库作为镜像,可以方便我们查看 普通的git cl...

3562
来自专栏智能合约

Phalcon入门教程之目录结构

1033
来自专栏一个爱瞎折腾的程序猿

docker发布netcore网站-零散记录

790
来自专栏破晓之歌

Python 镜像安装pip的包 原

解决方法:到 http://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud 页面下载所需的wordcloud模块的w...

2323
来自专栏云知识学习

linux下安装安装杀毒软件clamav杀毒

一、安装clamav文件 相关下载链接:http://www.clamav.net/downloads 使用命令:wget 加上对应版本的软件链接

74013
来自专栏王磊的博客

使用Docker部署RabbitMQ集群

本文重点介绍的Docker的使用,以及如何部署RabbitMQ集群,最基础的Docker安装,本文不做过多的描述,读者可以自行度娘。

2192
来自专栏张善友的专栏

IIS 8:IIS 入门

深埋在您的 Microsoft 服务器 (2008年、 2008 R2 和 2012年的版本) 的范围内是最强大的 Web 服务器可用。 它只等待你来发挥其全部...

3155
来自专栏云计算教程系列

如何在Ubuntu 18.04上测试与分子的可靠角色

Ansible中的单元测试是确保角色按预期运行的关键。通过允许您指定针对不同环境测试角色的方案,Molecule使此过程更容易。使用Ansible,Molecu...

1001

扫码关注云+社区