一、IS4服务端配置

1、配置Client

new Client{ClientId = "xamarin",ClientSecrets = { new Secret("secret".Sha256()) },AccessTokenLifetime = 1800,//设置AccessToken过期时间AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,                    //RefreshTokenExpiration = TokenExpiration.Absolute,//刷新令牌将在固定时间点到期AbsoluteRefreshTokenLifetime = 2592000,//RefreshToken的最长生命周期,默认30天RefreshTokenExpiration = TokenExpiration.Sliding,//刷新令牌时,将刷新RefreshToken的生命周期。RefreshToken的总生命周期不会超过AbsoluteRefreshTokenLifetime。SlidingRefreshTokenLifetime = 3600,//以秒为单位滑动刷新令牌的生命周期。                    //按照现有的设置,如果3600内没有使用RefreshToken,那么RefreshToken将失效。即便是在3600内一直有使用RefreshToken,RefreshToken的总生命周期不会超过30天。所有的时间都可以按实际需求调整。AllowOfflineAccess = true,//如果要获取refresh_tokens ,必须把AllowOfflineAccess设置为trueAllowedScopes = new List<string>{"api",StandardScopes.OfflineAccess, //如果要获取refresh_tokens ,必须在scopes中加上OfflineAccessStandardScopes.OpenId,//如果要获取id_token,必须在scopes中加上OpenId和Profile,id_token需要通过refresh_tokens获取AccessToken的时候才能拿到(还未找到原因)StandardScopes.Profile//如果要获取id_token,必须在scopes中加上OpenId和Profile
                    }}

2、实现IResourceOwnerPasswordValidator接口,自定义用户登录

public class ResourceOwnerPasswordValidator : IResourceOwnerPasswordValidator{public Task ValidateAsync(ResourceOwnerPasswordValidationContext context){//根据context.UserName和context.Password与数据库的数据做校验,判断是否合法if (context.UserName == "test" && context.Password == "test"){context.Result = new GrantValidationResult(subject: context.UserName,authenticationMethod: OidcConstants.AuthenticationMethods.Password);}else{ //验证失败context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant,"invalid custom credential");}return Task.FromResult(0);}}

3、在Startup中加入如下配置

 services.AddIdentityServer().AddSigningCredential(IdentityServerBuilderExtensionsCrypto.CreateRsaSecurityKey()).AddInMemoryApiResources(Config.GetApis()).AddInMemoryIdentityResources(Config.GetIdentityResources()).AddInMemoryClients(Config.GetClients()).AddProfileService<ProfileService>().AddResourceOwnerValidator<ResourceOwnerPasswordValidatorService>();//注入自定义用户登录验证

二、客户端获取access_token+refresh_token

如果是后台代码需要获取access_token+refresh_token,则可以参考官方Samples,https://github.com/IdentityServer/IdentityServer4.Samples/tree/release/Clients/src/ConsoleResourceOwnerFlowRefreshToken

如果是前端需要获取access_token+refresh_token,则可以通过 http://localhost:5000/connect/token 接口获取

1、获取access_token+refresh_token

获取access_token+refresh_token的参数配置如下,Content-Type的值是 application/x-www-form-urlencoded

2、通过第一步获取到的refresh_token去刷新access_token

转载于:https://www.cnblogs.com/fengchao1000/p/9849806.html

Identityserver4中ResourceOwnerPassword 模式获取refreshtoken相关推荐

  1. java将从键盘输入的时间格式化_java 时间格式化中的模式字母

    java日期格式化中的模式字母有特定的意义,由于没有注意,今天在做工程的时候导致出现了奇怪的日期: 错误写法如下: 然而得到了错误的结果: 正确写法如下: 这样就得到了正确的结果 mm指的是分钟,MM ...

  2. (转)Spring中Singleton模式的线程安全

    不知道哪里的文章,总结性还是比较好的.但是代码凌乱,有的还没有图.如果找到原文了可以进行替换! spring中的单例 spring中管理的bean实例默认情况下是单例的[sigleton类型],就还有 ...

  3. python getattr调用自己模块_在Python中通过getattr获取对象引用的方法

    getattr函数 (1)使用 getattr 函数,可以得到一个直到运行时才知道名称的函数的引用. >>> li = ["Larry", "Curly ...

  4. 以人为本的机器学习:谷歌人工智能产品设计概述 By 机器之心2017年7月17日 12:13 取代了手动编程,机器学习(ML)是一种帮助计算机发现数据中的模式和关系的科学。对于创建个人的和动态的经历

    以人为本的机器学习:谷歌人工智能产品设计概述 By 机器之心2017年7月17日 12:13 取代了手动编程,机器学习(ML)是一种帮助计算机发现数据中的模式和关系的科学.对于创建个人的和动态的经历来 ...

  5. Java多线程编程中Future模式的详解

    转载自 https://www.cnblogs.com/winkey4986/p/6203225.html Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker ...

  6. Vue-router 中hash模式和history模式的区别

    Vue-router 中hash模式和history模式的关系 在vue的路由配置中有mode选项 最直观的区别就是在url中 hash 带了一个很丑的 # 而history是没有#的 mode:&q ...

  7. vue定时ajax获取数据,vue 中使用 AJAX获取数据的方法

    在VUE开发时,数据可以使用jquery和vue-resource来获取数据.在获取数据时,一定需要给一个数据初始值. 看下例: new Vue({ el:'#app', data:{data:&qu ...

  8. vue中生产模式和调试模式_为什么在生产中进行调试是如此诱人?

    vue中生产模式和调试模式 生产调试 为什么在生产中进行调试是如此诱人? 在我的第一份工作中,我要做的任务之一是修复一个错误,该错误过去在非常复杂的生产系统中有时会发生. 那很简单! - 我想. 我将 ...

  9. controller调用另一个controller中的方法 获取返回值_必须掌握!你知道 Spring 中运用的 9 种设计模式吗 ?...

    Spring中涉及的设计模式总结,在面试中也会经常问道 Spring 中设计模式的问题.本文以实现方式.实质.实现原理的结构简单介绍 Sping 中应用的 9 种设计模型,具体详细的刨析会在后面的文章 ...

最新文章

  1. 【模板】树链剖分 P3384
  2. poj1654 Area
  3. C++ STL算法之accumulate函数
  4. php dropdownlist,遇到dropdownlist
  5. Jquery中将数组转换成Json
  6. 新闻发布项目——实体类(newsTb)
  7. JavaScript应用(重点数组)
  8. 获取电脑系统当前时间
  9. 杭电计算机14年笔试真题
  10. 统计自然语言处理——信息论基础
  11. a4如何打印双面小册子_a4如何排版打印双面小册子?
  12. 转载130个原文网站,原文链接:https://blog.csdn.net/qq_43901693/article/details/100606828
  13. 真正的小说 真正的生活 真正的蜕变 真正的品味
  14. 茅台nfc显示服务器临时维护,茅台酒使用手机NFC扫描瓶盖辨别真伪方法
  15. 炒菜,我把厨房烧了!
  16. linux常用命令_Linux常用命令 unzip
  17. java实现图片上传至本地
  18. AcWing133. 蚯蚓
  19. 【转】软件测试相关的63个国外站点
  20. 原型系统研究报告撰写_阅书斋 | 王蔷英语教师行动研究:如何撰写行动研究报告...

热门文章

  1. 1002:输出第二个整数
  2. 【STM32】FreeRTOS创建和删除任务示例(静态方法)(了解)
  3. 【STM32】SPI简介
  4. 【Libevent】Libevent学习笔记(二):创建event_base
  5. python迭代器和生成器_Python之迭代器和生成器
  6. 用什么技术实现前台页面设计_装饰+装配式,用什么样的方式去实现室内的装配工程施工技术?...
  7. 每天一道LeetCode-----字符串乘法
  8. libevent源码学习-----统一事件源及信号绑定函数
  9. 找最大公约数和最小公倍数(c语言实现)
  10. Linux命令(2)—— 如何切换当前目录