asp.net-mvc – 刷新IdentityServer4客户端中的访问令牌
|
我想知道如何使用混合流刷新IdentityServer4客户端中的访问令牌,并使用ASP.NET Core MVC构建. 如果我已正确理解整个概念,客户端首先需要具有“offline_access”范围,以便能够使用刷新令牌,这是启用短期访问令牌的最佳实践,并且能够撤销刷新令牌,从而阻止任何新的访问令牌发给客户. 我成功获得了访问令牌和刷新令牌,但是我应该如何处理MVC客户端中访问令牌的实际更新过程? OpenId Connect(OIDC)中间件可以自动处理吗?或者我应该通过基本检查访问令牌是否已过期或将很快过期(即将到来的30秒)来检查访问令牌的到期时间,我通过基本检查访问令牌是否过期(即将到来的30秒)然后通过使用刷新令牌调用令牌端点来刷新访问令牌? 是否建议在我的Controller操作方法中使用IdentityModel2库TokenClient扩展方法RequestRefreshTokenAsync来调用令牌端点? 我见过OIDC中间件事件中的代码请求访问令牌并使用响应存储包含过期日期时间的声明.问题是我的OIDC已经以某种方式自动请求访问令牌,因此在收到第一个访问令牌后直接请求新的访问令牌感觉不太好. 没有访问令牌刷新逻辑的Controller操作方法示例: public async Task<IActionResult> GetInvoices()
{
var token = await HttpContext.Authentication.GetTokenAsync("access_token");
var client = new HttpClient();
client.SetBearerToken(token);
var response = await client.GetStringAsync("http://localhost:5001/api/getInvoices");
ViewBag.Json = JArray.Parse(response).ToString();
return View();
}
解决方法OIDC中间件不会为您处理此问题.它在检测到HTTP 401响应时执行,然后将用户重定向到IdentityServer登录页面.在重定向到MVC应用程序之后,它会将声明转换为ClaimsIdentity并将其传递给Cookies中间件,这将实现会话cookie.只要cookie仍然有效,其他所有请求都不会涉及OIDC中间件. 所以你必须自己照顾好这个.您要考虑的另一件事是,无论何时刷新访问令牌,您都必须更新现有令牌,这样您就不会丢失它.如果您不这样做,会话cookie将始终包含相同的令牌 – 原始令牌 – 您每次都会刷新它. 我找到的解决方案是将其挂钩到Cookies中间件. >在每个请求中,使用Cookies中间件事件来检查访问令牌 我喜欢这种方法的是,在你的MVC代码中,你几乎可以保证总是有一个有效的访问令牌,除非引用令牌连续多次失败. 我不喜欢的是它与MVC非常相关 – 更具体地说是Cookie中间件 – 所以它不是真正的便携式. 你可以看看我放在一起的this GitHub repo.它确实使用IdentityModel,因为它可以处理所有事情并隐藏您必须对IdentityServer进行的HTTP调用的大部分复杂性. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-3 – StructureMap初学者|物业注入
- asp.net核心 – 如何排除在ASP.NET Core中发布文件?
- asp.net – 如何将IIS Developer Express切换到“经典模式”
- asp.net-mvc – 回发无法使用ASP.NET路由(视图状态MAC验证失
- 如何在ASP.NET GridView中找到控件的客户端ID?
- asp.net-mvc – 我真的需要一个ORM吗?
- ASP.NET Web API可以在与MVC相同的URL上工作吗?
- ASP.NET Core RC2配置自定义AppSettings
- asp.net-mvc – 如何使actionFilter on action方法优先于控
- 如何在ASP.NET WebForms中实现TDD
- asp.net-mvc – 获取ActionName,ControllerName和
- asp.net – RequiredFieldValidator要求用户单击
- ASP.NET:获取页面的文件名
- .net – 索引和长度必须指向字符串中的位置?
- asp.net-mvc – HiddenInput(DisplayValue = fal
- asp经典 – 经典的asp cint
- asp.net-core – Asp.net Core中的UserHostAddre
- asp.net-mvc – 对Json解决方法的EntityFramewor
- asp.net-mvc – 具有默认日期的MVC4日期选择器
- asp.net-mvc-3 – Ajax.BeginForm返回整页
