【发布时间】:2021-05-24 21:41:46
【问题描述】:
我有一个 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)
刷新页面后,会话刷新和 AJAX 请求再次开始工作(至少在下一分钟),但有些页面是“长期存在的”,因此希望用户在while 是不可接受的。
如何使 AJAX 请求正常工作?我应该考虑在我的客户端中使用隐式流吗?如果是这样,我将如何处理“MVC”部分?
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-mvc-4 openid-connect