asp.net-mvc-4 - 如何将应用程序会话保持在同一域上?
问题描述
关于 JWT 身份验证,我已经研究了大约一个月的问题。我有多个使用 Owin 的 Asp.net MVC 4.5 应用程序,这些应用程序部署在同一台机器上,并且使用带有集成管道的 IIS 具有不同的子域。我的问题是,当我登录到一个应用程序并浏览到另一个应用程序时,它不会重新验证并自动允许用户通过授权过滤器。
我尝试将 cookie 策略设置为严格,并将 cookie 域、路径和名称设置为不同的值,但无法解决此问题。
我有一个自定义身份验证库,这些应用程序中的每一个都使用它。我希望你能帮忙。
我想要发生的是每个应用程序都维护自己的身份验证会话,并且仅仅因为用户针对 AD 域进行了身份验证,它要求用户重新授权以确保他们可以访问特定的应用程序。
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
CookieName = $"{tenantId}{clientId}"
})
.UseOpenIdConnectAuthentication(GetAuthenticationOptions(clientId, tenantId, clientSecret));
private static OpenIdConnectAuthenticationOptions GetAuthenticationOptions(string clientId, string tenantId, string clientSecret)
{
return new OpenIdConnectAuthenticationOptions
{
MetadataAddress = string.Format("https://login.microsoftonline.com/{0}/.well-known/openid-configuration", tenantId),
ClientId = clientId,
ClientSecret = clientSecret,
ResponseType = "id_token token",
Resource = "https://graph.microsoft.com",
UseTokenLifetime = true,
AuthenticationMode = AuthenticationMode.Active,
Notifications = new OpenIdConnectAuthenticationNotifications
{
SecurityTokenValidated = SecurityTokenValidated
},
TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "mailNickName",
}
};
}
解决方案
尝试将 web.config 中“sessionState”XML 元素的“cookieName”属性设置为每个应用程序的不同值。这将阻止他们使用相同的会话 ID。
<system.web>
<sessionState regenerateExpiredSessionId="false" cookieless="UseCookies" cookieName="id" />
</system.web>
推荐阅读
- ios - 取消按钮无法在 GMSAutocompleteViewController 中显示
- python - Python:按时间间隔分组
- symfony - ButtonType Symfony 的 isClicked()
- java - RecyclerView 带有过滤器列表的可点击对象
- apache - Httpd.conf 重定向到外部 url apache tomcat
- sql - Azure 流分析 - 将查询输出转换为 JSON
- ios - 如何投射 UnsafeMutableRawPointer!到 UnsafeMutablePointer
在 Swift 3.0 或更新版本中? - python-3.x - Python脚本没有被执行
- ios - 如何在 ios swift 中为多个 ViewConntrollers 使用相同的 StoryBoard
- android - OpenCV 轮廓未关闭