我从来没有使用过身份服务器,我想知道如果用户已经使用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;
只是感觉有一个合适的方法来做这些事情,但我却错过了。如果有人能给我指出正确的方向,我会很感激。
- 然后它应该尝试验证用户
浏览器与Web应用程序进行通信。你应该有一个Web应用程序,能够重定向回IDS4登录。你所拥有的是一个API。后来Web应用程序与Web API通信。阅读更多 此处
- 如果可以识别用户,那么端点将返回正确的数据,否则如果不能识别用户,它将返回数据的一个子集。
你要找的是授权,你可以在端点上手动做这个检查。你可以使用以下方法访问当前用户 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
到用户的标识符。