Identityserver4 如何在Api项目中为登录用户获取用户ID?

Identityserver4 如何在Api项目中为登录用户获取用户ID?,identityserver4,Identityserver4,我有Api项目和IdentityServer项目。用户已登录IdentityServer。如何获取Api项目中登录用户的用户ID 我在identity server中通过了身份验证,但我没有访问api的权限,我在尝试调用api方法时看到401错误(未经授权),为什么? 我已将Api添加到ConfigureServices方法中的Startup.cs中: services.AddAuthentication(IdentityServerAuthenticationDefaults.Authenti

我有Api项目和IdentityServer项目。用户已登录IdentityServer。如何获取Api项目中登录用户的用户ID

我在identity server中通过了身份验证,但我没有访问api的权限,我在尝试调用api方法时看到401错误(未经授权),为什么?

我已将Api添加到ConfigureServices方法中的Startup.cs中:

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获取信息?你能展示你的代码吗?您需要在请求头中发送访问令牌。