zoukankan      html  css  js  c++  java
  • 第21章 登录

    为了使IdentityServer能够代表用户发出令牌,该用户必须登录IdentityServer。

    21.1 Cookie身份验证

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

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

    我们只公开这些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)调用AddAuthenticationAddCookie,因此要覆盖它们,您必须在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将提供默认值。

    github地址

  • 相关阅读:
    JSON.parse()与JSON.stringify()的区别
    响应式布局
    document.selection
    jQuery $.proxy() 方法
    <转> 键值表
    jquery-jqzoom 插件 用例
    jquery 笔记
    前端表单验证常用的15个JS正则表达式<转>
    css 问题解决
    <转>break与continue
  • 原文地址:https://www.cnblogs.com/thinksjay/p/10774854.html
Copyright © 2011-2022 走看看