繁体   English   中英

ASP.NET MVC OpenId 与 Ajax 混合

[英]ASP.NET MVC OpenId Mixed with Ajax

我有一个 MVC 应用程序,我正在从“专有”身份验证机制迁移到 OpenID Connect

这是配置

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = "Cookies",
    CookieName = "AuthCookieName"
});

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
    AuthenticationType = "OpenId",
    ClientId = "myClient",
    Authority = "https://mykeycloakinstance...",
    Scope = OpenIdConnectScope.OpenIdProfile,
    ResponseType = "code id_token token",
    TokenValidationParameters = new TokenValidationParameters()
    {
        ValidateIssuer = true,
    },
    Notifications = new OpenIdConnectAuthenticationNotifications
    {
        RedirectToIdentityProvider = async n =>
        {
            n.ProtocolMessage.RedirectUri = n.Request.Uri.AbsoluteUri;
        }
    },
    SaveTokens = true,
    SignInAsAuthenticationType = "Cookies"
});

该应用程序主要使用MVC范例(即服务器从数据库中提取信息并将它们注入到一个cshtml视图文件中)

但是某些页面/视图也使用 AJAX (即调用返回 JSON 数据并在客户端呈现 JSON 的端点),这就是我的问题所在。

我的访问令牌每 1 分钟刷新一次(我知道我可以更改该数字,但我更愿意将其保持在相对较低的水平)。 应用程序的“MVC”部分通过快速将用户重定向到 IDP 并返回来完美处理它

但是执行 Ajax 请求的页面在第一分钟有效(只要访问令牌有效),然后中断并开始返回 302(AJAX 请求尝试重定向到 IDP)

在此处输入图像描述

刷新页面后, session 刷新并且 AJAX 请求再次开始工作(至少在下一分钟),但有些页面是“长寿”的,所以期望用户不时刷新页面可以接受。

如何使 AJAX 请求正常工作? 我应该考虑在我的客户端中使用隐式流吗? 如果是这样,我将如何处理“MVC”部分?

一种选择是在后端处理所有令牌,因此客户端(浏览器)不需要处理令牌刷新。

OAuth 2.1 中已弃用隐式流,不应再将其用于新项目。

两个值得阅读的链接是:

如果您使用的是 ASP.NET 内核,那么您可以使用 IdentityModel 库及其内置的访问令牌管理。 它可以使用您的刷新令牌自动刷新访问令牌。 https://identitymodel.readthedocs.io/en/latest/aspnetcore/web.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM