blazor webassembly windows 身份验证 + .netcore 托管
blazor webassembly windows authentication + .netcore hosted
我还在学习 blazor,想在其中做一些解决方案,
但要求是使用 windows 之类的东西 windows auth (用户登录就足够了)
我知道 windows 身份验证现在不是 implemented/availible - 将来会是吗?
所以情况是:
-运行 浏览器中的 wasm
-实施
public class MyAuthStateProvider: AuthenticationStateProvider
在
Task<AuthenticationState> GetAuthenticationStateAsync()
-获取 windows 用户名(如何!?)
-使用此用户名从 post 到 api,从 api 从现有数据库中获取所有用户信息 + 用于下一次 api 调用的令牌
-return 开始吧。
有人可以指点我的方向吗?我搜索了很多,但大多数解决方案都是由于服务器端 blazor - 我需要它 wasm。
我还发现很多在服务器端实施新的自定义授权、自定义注册等 - 我已经有了我的用户数据库..
还是应该以完全不同的方式制作?
感谢和问候
好的,如果没人知道我会post回答
在 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());
}
所以我们需要在 wasm 中从这条路线开始,我们完成了 -
这是如何在 Web assembly
中获取 windows 用户名
d00lar 控制器对我不起作用,但它起作用了:
改为
return Ok(this.httpContextAccessor.HttpContext.User.Claims.Where(p => p.Type== ClaimTypes.Name).FirstOrDefault().Value.ToString());
我用过
[HttpGet]
[Authorize]
[Route("winuserid")]
public async Task<string> GetUserID()
{
string userid;
userid = User.Identity.Name;
return userid;
}
我还必须添加
app.UseAuthorization();
在服务器项目中Startup.cs
正如@Panagiotis-Kanavos 指出的那样,如果您将“托管”的完整 WASM 应用程序(即选择了“托管”选项的“Blazor Webassembly”项目)部署到 IIS,(使用“服务器”项目,而不是“客户端”项目),然后服务器项目变成一个普通的 .NET Core 站点,其中包含一个 WASM 应用程序。
这实际上意味着您可以使用“服务器”项目来设置 Windows 身份验证。
Windows 身份验证呈灰色 out/not 在 WASM 项目上可用,因为 WASM 项目 不是主机 它只是浏览器中的一个程序集运行。
因此,如果您在部署的服务器项目上打开 Windows 身份验证,那么您可以使用 IIS authentication/process Windows 声明,就像您通常对任何 .NET 所做的一样核心应用程序。 WASM 项目可能需要使用 .NET Core 服务器 API 来 get/receive/process 这些声明,但与实施自定义 Windows 身份验证方案相比,这种开销很小。
即无需实现自定义代码来打开它,只需在服务器项目上启用以下内容:
提醒:WASM 应用程序 可以部署 但在这种情况下,这不是您想要的 - 您想要部署 "服务器“ 项目到 IIS - Visual Studio 包含自动为您包装服务器项目中的 WASM/Client 应用程序的逻辑。
我还在学习 blazor,想在其中做一些解决方案, 但要求是使用 windows 之类的东西 windows auth (用户登录就足够了) 我知道 windows 身份验证现在不是 implemented/availible - 将来会是吗?
所以情况是:
-运行 浏览器中的 wasm
-实施
public class MyAuthStateProvider: AuthenticationStateProvider
在
Task<AuthenticationState> GetAuthenticationStateAsync()
-获取 windows 用户名(如何!?)
-使用此用户名从 post 到 api,从 api 从现有数据库中获取所有用户信息 + 用于下一次 api 调用的令牌
-return 开始吧。
有人可以指点我的方向吗?我搜索了很多,但大多数解决方案都是由于服务器端 blazor - 我需要它 wasm。 我还发现很多在服务器端实施新的自定义授权、自定义注册等 - 我已经有了我的用户数据库..
还是应该以完全不同的方式制作?
感谢和问候
好的,如果没人知道我会post回答
在 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());
}
所以我们需要在 wasm 中从这条路线开始,我们完成了 - 这是如何在 Web assembly
中获取 windows 用户名d00lar 控制器对我不起作用,但它起作用了:
改为
return Ok(this.httpContextAccessor.HttpContext.User.Claims.Where(p => p.Type== ClaimTypes.Name).FirstOrDefault().Value.ToString());
我用过
[HttpGet]
[Authorize]
[Route("winuserid")]
public async Task<string> GetUserID()
{
string userid;
userid = User.Identity.Name;
return userid;
}
我还必须添加
app.UseAuthorization();
在服务器项目中Startup.cs
正如@Panagiotis-Kanavos 指出的那样,如果您将“托管”的完整 WASM 应用程序(即选择了“托管”选项的“Blazor Webassembly”项目)部署到 IIS,(使用“服务器”项目,而不是“客户端”项目),然后服务器项目变成一个普通的 .NET Core 站点,其中包含一个 WASM 应用程序。
这实际上意味着您可以使用“服务器”项目来设置 Windows 身份验证。
Windows 身份验证呈灰色 out/not 在 WASM 项目上可用,因为 WASM 项目 不是主机 它只是浏览器中的一个程序集运行。
因此,如果您在部署的服务器项目上打开 Windows 身份验证,那么您可以使用 IIS authentication/process Windows 声明,就像您通常对任何 .NET 所做的一样核心应用程序。 WASM 项目可能需要使用 .NET Core 服务器 API 来 get/receive/process 这些声明,但与实施自定义 Windows 身份验证方案相比,这种开销很小。
即无需实现自定义代码来打开它,只需在服务器项目上启用以下内容:
提醒:WASM 应用程序 可以部署 但在这种情况下,这不是您想要的 - 您想要部署 "服务器“ 项目到 IIS - Visual Studio 包含自动为您包装服务器项目中的 WASM/Client 应用程序的逻辑。