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。我还发现在服务器端实现新的自定义授权、自定义注册等很多 - 我已经拥有用户的数据库。
或者应该以完全不同的方式制作?
感谢致敬
之前的答案有点过时,所以我创建了一个 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 用户名
| 归档时间: |
|
| 查看次数: |
4922 次 |
| 最近记录: |