User.Identity.Name is null for Blazor Wasm hosted in asp.net core

pvabu6sv  于 2022-12-05  发布在  .NET
关注(0)|答案(3)|浏览(170)

对于www.example.com核心中托管的Blazor Wasm,用户。身份。名称为空asp.net。没有名称或电子邮件等声明。我使用的是Visual Studio的默认模板。
services.AddIdentityServer().AddApiAuthorization<ApplicationUser, ApplicationDbContext>();
services.AddAuthentication().AddIdentityServerJwt();
我错过了什么吗?
如果您需要更多信息,请告诉我。

z6psavjg

z6psavjg1#

几个月来,我一直在为同样的问题而挣扎。在尝试了许多方法后,我终于找到了解决办法。

using System.Linq;

services.AddIdentityServer().AddApiAuthorization<ApplicationUser, 
    ApplicationDbContext>(opt =>
       opt.IdentityResources["openid"].UserClaims.Add("name");
       opt.ApiResources.Single().UserClaims.Add("name");
   });

services.AddAuthentication().AddIdentityServerJwt();

请让我知道这是否解决了问题。谢谢:)

6uxekuva

6uxekuva2#

你的代码没有任何真实的意义。你没有在blazor应用程序中托管IdentityServer,而是有一个单独的专用服务来实现OpenIDConnect,并可以对用户进行身份验证和给予令牌。
在blazor应用程序中,通常使用这种类型的框架来配置身份验证:

services.AddAuthentication(options =>
{
    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
}).AddCookie(opt =>
   //Add configuration here
{
}).AddOpenIdConnect(options =>
{
   //Add configuration here
});

有关详细信息,请参阅以下文章:How do I implement Blazor authentication with OpenID Connect?

ct2axkht

ct2axkht3#

我在添加到Blazor WASM托管服务器项目的API控制器中也遇到了同样的问题。将此问题添加到我的program.cs文件中为我解决了这个问题:
services.Configure<IdentityOptions>(options => options.ClaimsIdentity.UserIdClaimType = ClaimTypes.NameIdentifier);
来源:https://github.com/dotnet/AspNetCore.Docs/issues/17517

相关问题