2

我刚刚从我的 Cordova Ionic5 移动应用程序中成功实现了PKCE 流,然后使用 auth_token 对我的 .NET Core 3.1 Web Api 进行授权。

问题是我无法从我的 .NET Core Web Api 访问用户信息:姓名、电子邮件等。

我真的需要知道刚刚通过身份验证的用户是谁。你能帮忙吗?

我的 PKCE 流程 代码在此处输入图像描述 Startup.cs

services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(options =>
            {
                options.Authority = _configuration["Auth0:Domain"];
                options.Audience = _configuration["Auth0:Audience"];
            });

...

app.UseAuthentication();
app.UseAuthorization();

4

1 回答 1

1

默认情况下,访问令牌不会包含nameemail等用户信息。

这是对 Auth0 租户进行默认身份验证的示例访问令牌(使用 PKCE 流和 SPA)。

{
  "iss": "https://example.auth0.com/",
  "sub": "auth0|REDACTED",
  "aud": [
    "REDACTED",
    "https://example.auth0.com/userinfo"
  ],
  "iat": 1599312415,
  "exp": 1599398815,
  "azp": "REDACTED",
  "scope": "openid profile email"
}

您的应用程序还应该收到一个id_token,它可能如下所示(假设请求/authorize包括 openid、配置文件和电子邮件范围)。

{
  "nickname": "joe.blogs",
  "name": "joe.blogs@example.com",
  "picture": "REDACTED",
  "updated_at": "2020-09-04T10:21:07.315Z",
  "email": "joe.blogs@example.com",
  "email_verified": false,
  "iss": "https://example.auth0.com/",
  "sub": "auth0|REDACTED",
  "aud": "REDACTED",
  "iat": 1599312415,
  "exp": 1599348415,
  "nonce": "REDACTED"
}

因此,您有几个选项可以将名称和电子邮件发送到您的后端 API。

  1. 在您的应用程序中,解析 id_token JWT 以获取名称和电子邮件,然后将这些字段显式传递给您的后端 API。
  2. 可以通过Auth0 规则使用名称和电子邮件丰富访问令牌。email这是添加到访问令牌的示例规则(注意:未经测试):
function addAttributes(user, context, callback) {
  context.accessToken.email = user.email;
  callback(null, user, context);
}

请参阅 Auth0上下文对象用户对象的文档以查看您可以访问的内容...

我的想法是选项#1是更好的方法,因为;a) 我不喜欢在访问令牌中包含 PII,并且 b) 依赖访问令牌来获取姓名和电子邮件等信息可能会导致问题出现(例如,如果您的后端 API 也需要被调用,会发生什么情况使用没有此信息的 Auth0 M2M 令牌)。

最后,在您的 .NET 应用程序中,您可以通过解析 Authorization HTTP 标头中的 JWT 来获取所需的信息。如果您需要有关此部分的更多信息,请告诉我(如果需要,我也可以提供帮助)......假设主要问题是您在 JWT 访问令牌中没有所需的用户信息(您如果您按照我的指示,现在应该)...

于 2020-09-05T13:55:51.027 回答