如何在 Web API 和 Blazor 服务器之间使用 SSO 进行身份验证?

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

我有两个项目 - 第一个是 .NET 8 上的 Web API,第二个是 .NET 8 上的 Blazor Web 应用程序。我需要将这两个项目部署到 Windows Server 上的 IIS。问题是我需要使用 SSO 作为身份验证。

我最初的想法是在网页上使用 Windows 身份验证,然后将凭据传递给 Web API,以便它可以创建 JWT 令牌并使用声明来了解角色类型并在其他端点上进行进一步身份验证。

[HttpGet]
public async Task<ActionResult<AuthenticateResponse>> Login()
{
    string Name =  HttpContext.User.Identity;
    Console.WriteLine(Name);

    if (Name != null)
    {
        // This creates a JWT token
        var auth = await _loginService.Authenticate(Name); 

        if (auth != null)
            return Ok(auth);
    }

    return Unauthorized();
}

问题是,当我使用此端点时,Web API 最终使用 Web 应用程序池上的用户,而不是客户端 Windows 用户名。

我还通过网页将请求中的

UseDefaultCredentials
设置为
True

UseDefaultCredentials = true // Ensure Windows Authentication credentials are used

身份验证本身是通过检查域并查看该用户是否存在于其中来完成的。

我尝试过使用

System.Security.Principal.WindowsIdentity.GetCurrent().Name; 

但这没有用。

我尝试关闭凭据,甚至无法获取应用程序池用户。

我尝试过更改应用程序池。

我考虑过通过请求发送用户名,但随后任何人都可以访问任何人的令牌。也许我可以使用一些 Cors 策略,只接受 Web 应用程序请求,并放置一个端点,您在其中输入用户名,它会返回令牌?

c# iis blazor single-sign-on .net-8.0
1个回答
0
投票
  • 用户登录您的 Blazor Web 应用程序
    • 在 Blazor 应用程序中生成 JWT(或通过 API 的私人通道)
    • 将 JWT 从 Blazor 返回给客户端 - 不要让客户端再次向您的 API 发送凭据
    • 客户端可以使用本地存储、cookie 或其他方式保存 JWT
    • 客户端现在可以使用该 JWT 访问您的 Web API
© www.soinside.com 2019 - 2024. All rights reserved.