热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

IdentityServer4实现自定义GrantType授权模式

OAuth2.0默认四种授权模式(GrantType):授权码模式(authorization_code)简

OAuth 2.0 默认四种授权模式(GrantType):


  • 授权码模式(authorization_code)

  • 简化模式(implicit)

  • 密码模式(password)

  • 客户端模式(client_credentials)

使用 IdentityServer4,我们可以自定义授权模式吗?答案是可以的,比如我们自定义实现一个anonymous授权模式(匿名访问)。

创建AnonymousGrantValidator(继承IExtensionGrantValidator):

public class AnonymousGrantValidator : IExtensionGrantValidator{  

 private readonly ITokenValidator _validator;  
 
  public AnonymousGrantValidator(ITokenValidator validator)    {_validator = validator;}  
   public string GrantType => "anonymous";  

   public async Task ValidateAsync(ExtensionGrantValidationContext context)    {        //var userToken = context.Request.Raw.Get("token");//if (string.IsNullOrEmpty(userToken))//{//    context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant);//    return;//}//var result = await _validator.ValidateAccessTokenAsync(userToken);//if (result.IsError)//{//    context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant);//    return;//}// get user's identity//var sub = result.Claims.FirstOrDefault(c => c.Type == "sub").Value;var claims = new List() { new Claim("role", GrantType) }; // Claim 用于配置服务站点 [Authorize("anonymous")]context.Result = new GrantValidationResult(GrantType, GrantType, claims);}
}

修改Client配置:

new Client
{ClientId &#61; "client1",AllowedGrantTypes &#61; GrantTypes.List(GrantTypes.ResourceOwnerPassword.FirstOrDefault(), "anonymous"), //一个 Client 可以配置多个 GrantTypeAllowOfflineAccess &#61; true,AccessTokenLifetime &#61; 3600 * 6, //6小时SlidingRefreshTokenLifetime &#61; 1296000, //15天ClientSecrets &#61;{        new Secret("123".Sha256())},AllowedScopes &#61; new List<string>{        "api2"}
}

DI 增加注入对象&#xff1a;

builder.AddExtensionGrantValidator();

调用示例代码&#xff1a;

public async Task AnonymousAsync(string userToken){    var payload &#61; new{token &#61; userToken};    // create token clientvar client &#61; new TokenClient(disco.TokenEndpoint, "client1", "123");    // send custom grant to token endpoint, return responsereturn await client.RequestCustomGrantAsync("anonymous", "api2", payload);
}

Http 访问示例&#xff1a;

POST /connect/tokengrant_type&#61;anonymous&
scope&#61;api2&
token&#61;...&
client_id&#61;api1.client
client_secret&#61;secret

参考资料&#xff1a;


  • Extension Grants

相关文章&#xff1a;


  • IdentityServer4(OAuth2.0服务)折腾笔记

  • IdentityServer4 实现 OpenID Connect 和 OAuth 2.0

  • IdentityServer4 使用OpenID Connect添加用户身份验证

  • IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API

  • IdentityServer4 指定角色授权&#xff08;Authorize(Roles&#61;"admin"))

  • IdentityServer4 SigningCredential&#xff08;RSA 证书加密&#xff09;

原文地址&#xff1a;http://www.cnblogs.com/xishuai/p/identityserver4-implement-custom-granttype.html


.NET社区新闻&#xff0c;深度好文&#xff0c;微信中搜索dotNET跨平台或扫描二维码关注


推荐阅读
  • django项目中使用手机号登录
    本文使用聚合数据的短信接口,需要先获取到申请接口的appkey和模板id项目目录下创建ubtils文件夹,定义返回随机验证码和调取短信接口的函数function.py文件se ... [详细]
  • 1.选择一个翻译页面,我选择的是有道词典(http:dict.youdao.com)2.随便输入一个英语单词进行翻译,然后查看源文件,找到 ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • 本文通过对OkHttp源码的详细解读,旨在帮助读者理解其核心执行流程,特别是同步与异步请求的处理方式。文中不仅涵盖了基本的使用示例,还深入探讨了OkHttp的核心功能——拦截器链的工作原理。 ... [详细]
  • 使用URLHttpConnection获取并展示图片至ImageView的方法
    本文介绍如何通过URLHttpConnection方式从网络加载图片,并将其显示在Android应用的ImageView组件上。包括布局文件和Java代码的具体实现。 ... [详细]
  • JobScheduler5.0源码分析
    0.JobScheduler执行代码mJobScheduler(JobScheduler)getSystemService(Context.JOB_SCHEDULER_SERVICE); ... [详细]
  • 获取年月日,之前的日期不能选择日历cCalendar.getInstance();获取系统的工具类【可以获取时间】DatePickerDialogdate ... [详细]
  • 深入解析 Android 中的 ActivityGroup 实现
    本文详细探讨了如何在 Android 应用中使用 ActivityGroup 来实现类似微博客户端主界面的效果,并分析了 TabActivity 的局限性,推荐使用更为灵活的 ActivityGroup 方案。 ... [详细]
  • 本文探讨了在JavaScript中如何有效地从服务器控件DropDownList中获取绑定的ID值,而非仅仅是显示的文本值。这对于需要根据用户选择动态处理数据的应用场景非常有用。 ... [详细]
  • 2023年PHP处理请求超时的全面指南
    本文详细介绍了在PHP中处理请求超时的各种方法,包括设置脚本执行时间、处理file_get_contents函数超时以及优化AJAX请求等,适合开发者参考学习。 ... [详细]
  • 正在学习操作系统开发,遇到一个内核在GRUB Legacy(0.97)中无法成功引导的问题。具体表现为输入内核命令后显示错误信息,尝试引导时GRUB挂起。 ... [详细]
  • 本文深入探讨了HTML5中十五个重要的新特性,为开发者提供了详细的指南。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • KNN算法在海伦约会预测中的应用
    本文介绍如何使用KNN算法进行海伦约会的预测。我们将从数据导入、数据预处理、数据可视化到最终的模型训练和测试进行全面解析。 ... [详细]
  • 本文旨在探讨Linux系统中两种重要的进程间通信(IPC)机制——System V和POSIX的标准及其特性,为开发者提供深入的理解。 ... [详细]
author-avatar
Evilchrist
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有