首页
学习
活动
专区
圈层
工具
发布

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中完成此操作。 例如:

代码语言:javascript
复制
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将提供默认值。

下一篇
举报
领券