如何使用刷新令牌和 OpenId Connect 处理 ASP.NET Core 中过期的访问令牌

2024-01-05

我已经使用和使用“Microsoft.AspNetCore.Authentication.OpenIdConnect”:“1.0.0”和“Microsoft.AspNetCore.Authentication.Cookies”:“1.0.0”的asp.net core mvc应用程序配置了ASOS OpenIdConnect服务器。我已经测试了“授权代码”工作流程,一切正常。

客户端 Web 应用程序按预期处理身份验证,并创建一个存储 id_token、access_token 和 refresh_token 的 cookie。

如何强制 Microsoft.AspNetCore.Authentication.OpenIdConnect 在过期时请求新的 access_token?

asp.net core mvc应用程序忽略过期的access_token。

我想让 openidconnect 查看过期的 access_token,然后使用刷新令牌进行调用以获取新的 access_token。它还应该更新 cookie 值。如果刷新令牌请求失败,我希望 openidconnect“注销”cookie(删除它或其他东西)。

app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AutomaticAuthenticate = true,
            AutomaticChallenge = true,
            AuthenticationScheme = "Cookies"
        });

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
        {
            ClientId = "myClient",
            ClientSecret = "secret_secret_secret",
            PostLogoutRedirectUri = "http://localhost:27933/",
            RequireHttpsMetadata = false,
            GetClaimsFromUserInfoEndpoint = true,
            SaveTokens = true,
            ResponseType = OpenIdConnectResponseType.Code,
            AuthenticationMethod = OpenIdConnectRedirectBehavior.RedirectGet,
            Authority = http://localhost:27933,
            MetadataAddress = "http://localhost:27933/connect/config",
            Scope = { "email", "roles", "offline_access" },
        });

看来asp.net core的openidconnect身份验证中没有编程来管理接收到的服务器上的access_token。

我发现我可以拦截cookie验证事件并检查访问令牌是否已过期。如果是这样,请使用 grant_type=refresh_token 对令牌端点进行手动 HTTP 调用。

通过调用 context.ShouldRenew = true;这将导致 cookie 被更新并在响应中发送回客户端。

我已经提供了我所做工作的基础,并将在所有工作解决后努力更新此答案。

app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AutomaticAuthenticate = true,
            AutomaticChallenge = true,
            AuthenticationScheme = "Cookies",
            ExpireTimeSpan = new TimeSpan(0, 0, 20),
            SlidingExpiration = false,
            CookieName = "WebAuth",
            Events = new CookieAuthenticationEvents()
            {
                OnValidatePrincipal = context =>
                {
                    if (context.Properties.Items.ContainsKey(".Token.expires_at"))
                    {
                        var expire = DateTime.Parse(context.Properties.Items[".Token.expires_at"]);
                        if (expire > DateTime.Now) //TODO:change to check expires in next 5 mintues.
                        {
                            logger.Warn($"Access token has expired, user: {context.HttpContext.User.Identity.Name}");

                            //TODO: send refresh token to ASOS. Update tokens in context.Properties.Items
                            //context.Properties.Items["Token.access_token"] = newToken;
                            context.ShouldRenew = true;
                        }
                    }
                    return Task.FromResult(0);
                }
            }
        });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用刷新令牌和 OpenId Connect 处理 ASP.NET Core 中过期的访问令牌 的相关文章

  • 在 .NET Core 中为 SPA 生成角度包时如何解决错误失败?

    当我执行该应用程序时 我收到两个红色失败消息 如下所示 通常 当类型或其他方面出现错误时 失败 Microsoft AspNetCore SpaServices 0 生成浏览器应用程序包 失败 Microsoft AspNetCore Sp
  • VSTS/TFS设置环境变量ASP.NET core

    我正在尝试使用 VSTS 将 ASP NET Core 应用程序部署到 IIS 并执行以下任务 然而 经过多次谷歌搜索和浏览 MS 文档后 我找不到为部署设置环境变量的方法 我在环境范围的发布定义中设置的变量未设置为环境变量 知道如何实现这
  • 在 iFrame 内维护会话状态

    不确定我是否疯了 但我在 iFrame 内的会话状态遇到问题 它是一个域在另一个域中的简单设置 我不需要跨域共享任何内容 我想做的就是将一个网站嵌入到另一个网站中 并且我希望该嵌入网站能够使用 cookie 会话状态登录 编辑 更新 等 为
  • ASP.NET Core 2.1 中不使用正则表达式的 URL 重写

    我的图标位于 images favicon ico而不是根 在Startup cs我可以添加重定向以避免 404 app UseRewriter new RewriteOptions AddRedirect favicon ico imag
  • 没有配置身份验证处理程序来处理该方案

    这是一个非常烦人的问题 我在我的 asp net core 项目上设置 cookie 身份验证 有时会出现此错误 有时不会 没有图案 它只是开始抛出错误 然后突然停止 然后再次开始 例外情况是 InvalidOperationExcepti
  • ASP.NET 5 beta 8 中的 Windows 身份验证支持

    我有一个 ASP NET 5 MVC 6 Web API 项目 大多数 API 端点都具有 Authorize 属性 并且在 IIS 和 Visual Studio 中的项目属性中启用了 Windows 身份验证 这一切在 beta 7 中
  • .NET Core 3.1 的 Azure DevOps 代码覆盖率

    我正在为 ASP NET Core 3 1 应用程序设置 Azure DevOps 管道 并且我有以下 YAML 定义测试段 用于构建 测试和代码覆盖率 task DotNetCoreCLI 2 displayName dotnet glo
  • jQuery cookie 过期时间

    我能够使用 jQuery 设置 cookie 并重定向到登陆页面 但我不知道如何将 cookie 到期日期设置为少于一天 例如 15 分钟 我无法在中找到解释插件文档 https github com carhartl jquery coo
  • 移动到不同 IIS 服务器 PC 后在 IIS 中发布的 asp.net core Web api 出现错误 500.19 (0x8007000d)

    我使用 Visual Studio 2015 在 asp net core 1 0 1 版本中开发了一个 Web api 当我在开发它的同一台电脑的 IIS 10 中发布该 Web api 时 一切正常 当我将Web api的发布文件夹复制
  • 应用程序“”未配置为多租户应用程序

    我正在尝试开发单租户应用程序 但登录时收到以下错误消息 应用程序 应用程序 ID 未配置为多租户应用程序 2018 年 10 月 15 日 之后创建的此类应用程序不支持使用 common 端点 使用特定于租户的端点或配置应用程序成为多租户
  • Razor 页面 - CSS 隔离 - 某些 HTML 标签的样式不起作用

    我正在尝试使用 Razor Pages CSS 隔离在 ASP NET Web 应用程序中设置正文 标题和表单标签的样式 在作用域 CSS 文件 Layout cshtml css 中为某些 HTML 标记创建的样式不起作用 其他组件文件也
  • 使用 Serilog 记录 Blazor 应用程序

    在 blazor 应用程序中 我配置了启动日志记录main如下 public static void Main string args var assembly Assembly GetExecutingAssembly GetName v
  • PHP 会话 ID——它们是如何生成的? [复制]

    这个问题在这里已经有答案了 当我打电话时session start or session regenerate id PHP 为会话 ID 生成看似随机的字符串 我想知道的是 它只是一个随机的字符序列 还是像uniqid 功能 因为如果只是
  • 如何使用 ASP.NET 5 (MVC 6) 中的 Response 属性对控制器操作进行单元测试? [复制]

    这个问题在这里已经有答案了 In an ASP NET 核心 1 0 MVC 6 项目我有一个控制器操作方法 我在其中使用Response设置标题的属性 HttpGet public IActionResult Get Response H
  • tomcat cookie域验证

    我正在使用 tomcat 8 0 21 和新的 Rfc6265 cookie 处理器 如果有以点开头的 cookie 我会收到以下错误 java lang IllegalArgumentException An invalid domain
  • 查找导致 Chrome SameSite 警告的 cookie

    正如你们中的一些人所知 Chrome 将于本月开始使用新的 SameSite cookie 政策 https web dev samesite cookies explained https web dev samesite cookies
  • VS 2017安装后无法运行基于project.json的.Net Core

    我已经在一个软件上工作了一段时间并且总是使用它来执行它点网运行 今天 我决定安装 VS 2017 之后 但仍不完全确定这是否是根本原因 我无法再运行我的软件 预先存在的项目与我使用 VS 2017 打开的项目相距甚远 因此我怀疑唯一的冲突可
  • 在 ASP.NET Core 中全局重用变量

    我必须强制这些变量在我想使用的每个变量上重用 这让我很困难 我需要创建一个类来定义这些变量并在整个程序中使用它们 我怎样才能做到这一点 string RootFolderName Uplaod string ProductPictureFo
  • 将 cookie 存储在共享首选项中

    我一直在绞尽脑汁地试图弄清楚这一点 我正在制作一个 HttpsURLConnection 并使用 java net cookiemanager 来管理我的 cookie 据我所知 无法使用 android webkit cookiemana
  • SetCookie 标头未存储

    我目前正在制作一个 Web 应用程序 其中 API 为 Node express js 前端为 Vue js 对于身份验证 我设置了 JWT 并通过 cookie HttpOnly 发送值 SetCookie 位于 Chrome Firef

随机推荐