gpt4 book ai didi

asp.net-mvc - 是否可以在同一站点上的两个 Web 应用程序之间共享 AAD 身份验证 cookie

转载 作者:行者123 更新时间:2023-12-02 07:28:13 25 4
gpt4 key购买 nike

问题后端网络应用程序是否可以接受并从登录前端生成的 AAD 身份验证 cookie 中获取用户身份-结束网络应用程序?

背景 我希望为 JavaScript SignalR 客户端实现 Azure Active Directory 单点登录体验,但我当前的解决方案要求用户登录两次。一次访问托管 js-client 的 Web 应用程序,然后再次访问,以便 js-client-app 可以访问后端。

使用 SSO AAD 身份验证的所需解决方案

  1. 前端(OWIN/MVC/JavaScript)
    • 用于识别用户身份的 AAD 身份验证 - 已实现
    • JS SignalR 客户端在服务器请求中包含身份验证 Cookie - 默认工作
  2. 后端(OWIN/SignalR PersistentConnection)
    • 通过 SignalR 请求中包含的前端身份验证中的加密 .AspNetCookies Cookie 来识别用户。
    • cookie 未被接受,OWIN 的调试输出为 Microsoft.Owin.Security.Cookies.CookieAuthenticationMiddleware 警告:0:取消保护票证失败

尝试后端 Startup.cs

public void ConfigureAuth( IAppBuilder app )
app.SetDefaultSignInAsAuthenticationType( CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
RedirectUri = redirectUri,
PostLogoutRedirectUri = redirectUri,
TokenValidationParameters = new TokenValidationParameters
{
RoleClaimType = "roles"
}
});
}

当前解决方案存在不需要的双重登录

  1. 前端网络应用(OWIN/MVC/JavaScript)
    • Owin 处理 AAD 身份验证
    • MVC 基于经过身份验证的用户生成 View
    • ADAL JS 在客户端处理用户身份验证并获取作为 Cookie 添加的访问 token (my_access_token)
  2. 后端网络应用(OWIN/SignalR PersistentConnection)
    • OWIN 通过提取 my-_access_token cookie 中的访问 token 并将其添加为 Bearer Authorization header 来处理身份验证
    • 通过覆盖PersistentConnection中的Authorize函数来处理授权基于经过身份验证的用户

当前前端Startup.cs

public void ConfigureAuth( IAppBuilder app )
GlobalFilters.Filters.Add( new AuthorizeAttribute() );
app.SetDefaultSignInAsAuthenticationType( CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
RedirectUri = redirectUri,
PostLogoutRedirectUri = redirectUri,
TokenValidationParameters = new TokenValidationParameters
{
RoleClaimType = "roles"
}
});
}

当前后端Startup.cs

public void Configuration( IAppBuilder app ){
app.Use( ( context, next ) =>
{
if (context.Request.Cookies.Any(c => c.Key.Equals("BearerToken")))
{
var cookie = context.Request.Cookies.First(c => c.Key.Equals("BearerToken"));
context.Request.Headers.Add("Authorization", new[] { $"Bearer {cookie.Value}" });
}

return next.Invoke();
});

app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = tenant,
TokenValidationParameters = new TokenValidationParameters
{
ValidAudience = audience,
RoleClaimType = "roles"
}
};
);
}

最佳答案

是的,这是可能的。您需要指定cookie加密和解密的共享 key 。 https://learn.microsoft.com/en-us/aspnet/core/security/cookie-sharing?view=aspnetcore-3.1

添加 AzureAd 后,您只需从两个应用程序中的同一 key 注入(inject)共享 Cookie 设置以及共享 Cookie 名称和 dataProtectionProvider。

关于asp.net-mvc - 是否可以在同一站点上的两个 Web 应用程序之间共享 AAD 身份验证 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46713712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com