如何在 .net Web api 的响应标头中使用 cookie 进行重定向?

问题描述 投票:0回答:1

我有一个有角度的网站,它通过第三方 IDP 进行身份验证。第三方 IDP 登录用户,然后将 SAML 响应发送到我的 Web API 端点。

如何让我的 API 端点设置 cookie 以进行身份验证,并在响应标头中使用 cookie 将用户发送回我的 Angular 网站? Web 应用程序和 API 都位于同一域中。

例如:

  1. 用户转到 https://mytestsite.com 并按登录。
  2. 角度应用程序使用 http.get 调用将用户发送到我的 API 端点https://mytestsite.com/api/auth/login
  3. API 端点创建一个 SAML 请求 url 并使用 return Ok(url) 将其发送给用户。
  4. Angular 应用程序然后执行 window.location.href = "https://login.microsoftonline.com/......" 将用户发送到 IDP。
  5. 用户被重定向到https://login.microsoftonline.com/.....。来自 Angular 应用程序。
  6. 用户登录第三方IDP。
  7. 用户被重定向到我的 api https://mytestsite.com/api/SamlConsumer
  8. Web api 验证用户,使用 HttpContext.SignInAsync 创建 cookie 并将用户重定向回 https://mytestsite.com
  9. 重定向到 https://mytestsite.com 时,我打开 Chrome 调试器工具,看到响应标头为空。 API 中的 Set-Cookies 消失了。

步骤 1-7 效果很好。我可以让用户进行身份验证并读回 SAML 响应。然后我还可以创建 cookie。但是,由于 SAML 响应转到 HttpPost API 端点,然后该端点使用 RedirectResult 将用户发送回我的角度站点,因此 cookie 不会添加到响应标头中。

如何将该 cookie 添加到 API 中的响应标头并发送到 Angular 应用程序以在用户使用网站时来回发送以验证用户身份?

.net angular saml
1个回答
0
投票

配置 cookie 来保存服务器详细信息不应该在前端(FE)/角度中执行,而应该在后端(BE)/API 中执行。

在第 8 步中,BE 需要设置所需的身份验证 cookie,以便您的 FE/浏览器可以在进一步请求时使用它。

仍然如此,重定向将不必设置cookie,

如果您使用自定义标头,则需要配置 BE 以允许浏览器读取/存储它:

services.AddCors(options =>
{
    options.AddPolicy("YourCorsPolicy", builder =>
    {
        builder.AllowCredentials()
          ... // your other CORS configs
               .WithExposedHeaders("Your-Custom-Header");
    });
});

您可能还想按照

这个答案
使用SameSite=Lax配置cookie选项。

希望这能让您走上正确的道路。

© www.soinside.com 2019 - 2024. All rights reserved.