Identityserver4 如何在Api项目中为登录用户获取用户ID?
我有Api项目和IdentityServer项目。用户已登录IdentityServer。如何获取Api项目中登录用户的用户ID 我在identity server中通过了身份验证,但我没有访问api的权限,我在尝试调用api方法时看到401错误(未经授权),为什么? 我已将Api添加到ConfigureServices方法中的Startup.cs中:Identityserver4 如何在Api项目中为登录用户获取用户ID?,identityserver4,Identityserver4,我有Api项目和IdentityServer项目。用户已登录IdentityServer。如何获取Api项目中登录用户的用户ID 我在identity server中通过了身份验证,但我没有访问api的权限,我在尝试调用api方法时看到401错误(未经授权),为什么? 我已将Api添加到ConfigureServices方法中的Startup.cs中: services.AddAuthentication(IdentityServerAuthenticationDefaults.Authenti
services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
.AddIdentityServerAuthentication(options =>
{
options.Authority = "url to identity server";
options.ApiName = "test";
});
services.AddAuthorization(options =>
{
options.AddPolicy("defaultpolicy", builder =>
{
builder.RequireAuthenticatedUser();
});
});
在配置方法中:
app.UseAuthentication();
Api控制器:
[Authorize("defaultpolicy")]
public class ApplicationsController : ControllerBase
{
....
}
在[Authorize]受保护的Api控制器方法中,您可以使用:
var userId=User?.FindFirst(ClaimTypes.NameIdentifier)代码>在[Authorize]受保护的Api控制器方法中,您可以使用:
var userId=User?.FindFirst(ClaimTypes.NameIdentifier)代码>在oidc流中,访问令牌包含一个子声明,即用户id。除了凭证和设备流之外的任何流都包含子声明。客户端
支持特定流,例如混合mvc。api是要保护的资源(覆盖一个或多个作用域)。IdentityServer允许客户端将用户路由到登录页面,并返回一个访问令牌
(允许客户端
代表用户访问api),其中包含子
声明。如果已配置,则在登录时提供身份令牌和访问令牌。它只包含子声明,可用于在注销后将用户重定向回客户端。如果需要其他声明,请使用访问令牌与userinfo端点联系。我已在下面的回答中添加了设置。好的,我已删除了回答。如何从Api获取信息?你能展示你的代码吗?您需要在请求头中发送访问令牌。在oidc流中,访问令牌包含一个子声明,即用户id。除了凭证和设备流之外的任何流都包含子声明。客户端
支持特定流,例如混合mvc。api是要保护的资源(覆盖一个或多个作用域)。IdentityServer允许客户端将用户路由到登录页面,并返回一个访问令牌
(允许客户端
代表用户访问api),其中包含子
声明。如果已配置,则在登录时提供身份令牌和访问令牌。它只包含子声明,可用于在注销后将用户重定向回客户端。如果需要其他声明,请使用访问令牌与userinfo端点联系。我已在下面的回答中添加了设置。好的,我已删除了回答。如何从Api获取信息?你能展示你的代码吗?您需要在请求头中发送访问令牌。