Blazor WebAssembly Windows 身份验证 + .netcore 托管

Dor*_*ian 5 c# authentication blazor blazor-webassembly

我仍在学习 blazor 并想在其中制定一些解决方案,但要求是使用 Windows 之类的东西,例如 Windows 身份验证(用户登录就足够了)我知道 Windows 身份验证现在尚未实现/可用 - 将来会吗?

所以场景是:

- 在浏览器中运行 wasm

-实施

  public class MyAuthStateProvider: AuthenticationStateProvider
Run Code Online (Sandbox Code Playgroud)

  Task<AuthenticationState> GetAuthenticationStateAsync()
Run Code Online (Sandbox Code Playgroud)

-在那里获取Windows用户名(如何!?)

-使用此用户名向 api 发布一些帖子,从 api 获取现有数据库中的所有用户信息 + 令牌以供下一次 api 调用

-将其归还给 wasm 并离开。

有人可以给我指出方向吗?我搜索了很多,但大多数解决方案都是由于服务器端 blazor - 我需要它 wasm。我还发现在服务器端实现新的自定义授权、自定义注册等很多 - 我已经拥有用户的数据库。

或者应该以完全不同的方式制作?

感谢致敬

Dor*_*ian 1

之前的答案有点过时,所以我创建了一个 git 存储库,在其中创建了示例应用程序,该应用程序使用 windows auth + authStateProvider + jwt 来访问 api + swagger,我们还可以运行 getuser 方法,获取 JWT 令牌并粘贴作为其授权。在.net 6中

它并不完美,但还算不错。这样每个人都可以看到可能性并适应自己的需求

https://github.com/d00lar/BlazorWasmAuthStateProvicerWindowsAuthAndJWT

问候


旧答案...好吧,如果没人知道,我会发布答案

在 SERVER 项目上,我们需要允许匿名 + Windows 身份验证(在 iis 上只能是 Windows - 仅在 Kestrel 中进行调试时需要匿名)

同样在服务器项目上我们需要安装

Microsoft.AspNetCore.Authentication.Negotiate

我们ConfigureServices需要添加services.AddAuthentication(NegotiateDefaults.AuthenticationScheme).AddNegotiate();

然后在某些控制器中例如

 [Authorize]
 [Route("getuser")]
 public ActionResult Index()
 {
        return Ok(this.httpContextAccessor.HttpContext.User.Claims.Where(p => p.Type== ClaimTypes.Name).FirstOrDefault().Value.ToString());
 }
Run Code Online (Sandbox Code Playgroud)

所以我们需要从 wasm 中的这条路径获取,我们就完成了 - 这是如何在 Web assembly 中获取 Windows 用户名