如何在net core 3和身份服务器上使用create react app -auth模板接收当前用户。

问题描述 投票:0回答:1

我从来没有使用过身份服务器,我想知道如果用户已经使用net core 3进行了身份验证,如何接收当前用户信息。

使用裸机创建react app -auth weather app模板。

WeatherForecastController 我们有authorize属性。

[Authorize]
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase

有了下面的端点:

[HttpGet]
public IEnumerable<WeatherForecast> Get()

如果你已经登录并获得了jwt承载令牌 就会返回正确的数据。

我想创建一个端点。 1. 允许匿名访问(无论是否登录,所以授权属性需要抛弃或覆盖) 2. 如果用户可以被识别,那么端点将返回正确的数据,否则如果用户无法被识别,它将返回一个数据的子集。

我正在努力检索提出请求信息的用户,我相信我应该使用的是 GET /connect/userinfo identityserver 端点,并将 bearer token 作为参数,但我不知道该怎么做。我想访问 user_id,以便与 identityUser 表进行对应。

我也试过了。

var identity = (ClaimsIdentity)User.Identity;
IEnumerable<Claim> claims = identity.Claims;

只是感觉有一个合适的方法来做这些事情,但我却错过了。如果有人能给我指出正确的方向,我会很感激。

authorization identityserver4 create-react-app
1个回答
0
投票
  1. 然后它应该尝试验证用户

浏览器与Web应用程序进行通信。你应该有一个Web应用程序,能够重定向回IDS4登录。你所拥有的是一个API。后来Web应用程序与Web API通信。阅读更多 此处

  1. 如果可以识别用户,那么端点将返回正确的数据,否则如果不能识别用户,它将返回数据的一个子集。

你要找的是授权,你可以在端点上手动做这个检查。你可以使用以下方法访问当前用户 ControllerBase.User 屁股是通过一个有效的 JWT tokens到API。考虑到你已经用类似bellow的代码设置了认证。

services.AddAuthentication("Bearer").AddJwtBearer("Bearer",
                options =>
                {
                    options.Authority = "http://localhost:5000";
                    options.Audience = "api1";
                    options.RequireHttpsMetadata = false;
                    options.TokenValidationParameters = new TokenValidationParameters()
                    {
                        NameClaimType = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"//To set Identity.Name 
                    };
                });

我正在努力检索提出请求的用户信息。

您可以简单地使用 ControllerBase.User 来获取当前API上的认证用户,无需调用任何端点。

更新。 设置 NameClaimType 如上文中的代码将设置 Identity.Name 到用户的标识符。

© www.soinside.com 2019 - 2024. All rights reserved.