我有两个项目 - 第一个是 .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 应用程序请求,并放置一个端点,您在其中输入用户名,它会返回令牌?