zoukankan      html  css  js  c++  java
  • IdentityServer4实战:自定义用户名和密码校验

    前言

    前几篇中我们使用 用户密码模式 生成的token所使用的用户全部都是模拟的测试用户,通过 AddTestUsers(IdentityServerHost.Quickstart.UI.TestUsers.Users) 方式注入到服务中的,实际项目中用户数据都是从数据库而来,在编译期是不知道都有哪些用户的。本篇笔者介绍如何通过数据库校验用户名和密码的合法性。

    IResourceOwnerPasswordValidator 接口

    ids4 为开发者提供了一个 IResourceOwnerPasswordValidator 接口,通过实现该接口可以做自己的用户名和密码的校验。

    该接口约定用户信息校验成功或失败后必须设置  context.Result 的值,在实现代码中我们会对该值就行说明。

    自定义 CustomerResourceOwnerPasswordValidator

    在项目 MicroShell.IdentityServer4.Server 中新建 CustomerResourceOwnerPasswordValidator 类,实现 IResourceOwnerPasswordValidator 接口,具体代码如下:

    /// <summary>
        /// 自定义用户校验
        /// </summary>
        public class CustomerResourceOwnerPasswordValidator : IResourceOwnerPasswordValidator
        {
            protected readonly TestUserStore Users;
    
            public CustomerResourceOwnerPasswordValidator()
            {
                // 方便起见,这里的用户数据我们还是使用 IdentityServerHost.Quickstart.UI 模板中的,实际项目可以通过数据库访问组件从数据库获取用户
                Users = new TestUserStore(TestUsers.Users); ;
            }
    
            public async Task ValidateAsync(ResourceOwnerPasswordValidationContext context)
            {
                if (Users.ValidateCredentials(context.UserName, context.Password))
                {
                    // 用户名和密码校验成功
                    context.Result = new GrantValidationResult(
                        subject: Users.FindByUsername(context.UserName).SubjectId,
                        authenticationMethod: "custom"
                    );
                }
                else
                {
                    // 用户名和密码校验失败
                    context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant);
                }
    
                return;
            }
        }

    注入 CustomerResourceOwnerPasswordValidator

    本文转载自:https://limitcode.com/detail/60701ab591dfde22104dcf13.html

  • 相关阅读:
    Navicat for MySQL下载、安装与破解
    javaweb之Cookie学习
    static特别用法【静态导包】——Java包的静态导入
    面试感悟----一名3年工作经验的程序员应该具备的技能
    致孩子
    java中的代码块是什么意思,怎么用
    ModelAttribute用法之一
    SpringMVC获取页面数据乱码的解决get/post
    总结过去10年的程序员生涯 (经验)---大神的建议
    hdu 5237 二进制
  • 原文地址:https://www.cnblogs.com/limitcode/p/14639524.html
Copyright © 2011-2022 走看看