获取 auth0 用户元数据作为用户信息的一部分

Posted

技术标签:

【中文标题】获取 auth0 用户元数据作为用户信息的一部分【英文标题】:get auth0 user metadata as part of user information 【发布时间】:2017-08-24 09:18:35 【问题描述】:

我没有找到如何从 Auth0 身份验证 api 获取 user_metadata:

$auth0Api = new Authentication($domain, $clientId, $clientSecret);

$tokenInfo = $auth0Api->login([
    'username' => $username,
    'password' => $password,
    'realm' => 'Username-Password-Authentication',
]);
$accessToken = $tokenInfo["access_token"];

$info = $auth0Api->userinfo($accessToken);

最后的$info数组只包含主要的用户信息,根本没有meta_data。我尝试从 Auth0 端创建规则以向用户本身添加内容(例如执行 user.customtag = 'helloworld'),但自定义也没有显示。

检索到的用户信息:


  "sub":"auth0|XXXX",
  "name":"XXXX@XXXX.com",
  "nickname":"XXXX",
  "picture":"XXXX.png",
  "updated_at":"2017-03-31T08:50:59.819Z",
  "email":"XXXX@XXXX.com",
  "email_verified":true

该用户的“Raw Json”选项卡显示了更完整的内容:


    "email": "XXXX@XXXX.com",
    "email_verified": true,
    "user_id": "auth0|XXXX",
    "picture": "XXXX.png",
    "nickname": "XXXX",
    "identities": [
        
            "user_id": "XXXX",
            "provider": "auth0",
            "connection": "Username-Password-Authentication",
            "isSocial": false
        
    ],
    "updated_at": "2017-03-31T08:50:59.819Z",
    "created_at": "2017-03-23T16:03:47.075Z",
    "name": "XXXX",
    "user_metadata": 
        "languageCode": "EN"
    ,
    "last_ip": "XXXX",
    "last_login": "XXXX",
    "logins_count": XXXX,
    "blocked_for": [],
    "guardian_enrollments": []

它应该如何工作?

环境:

作曲家:“auth0/auth0-php”:“~5.0” php 7.1 Auth0 免费帐号

【问题讨论】:

您能否提供更多信息 - 您正在使用哪些库/版本/您的 Auth0 租户是否启用了 OIDC 一致性等。此上下文将有助于确定适当的答案(我想帮助您但总体而言,“这取决于”很多因素,行为将是什么)。 @arcseldon 我添加了关于所有这些的信息 - 我不知道 OIDC 的事情 刚刚检查过,这目前适用于我运行的一个快速示例 - 只要 ID 令牌和用户配置文件都包含来自“元数据”字段的数据 相关配置文件(在 Auth0 仪表板中)是否已经包含元数据属性?在您的请求中 - 您是否要求提供该范围信息? YOUR_TENANT.auth0.com/… profile&redirect_uri=YOUR_REDIRECT_URI&nonce=12345 【参考方案1】:

尝试在本地启动您的应用程序,然后使用您自己的设置更新以下 URL 并将其粘贴到网络浏览器中:

https://YOUR_TENANT.auth0.com/authorize?client_id=YOUR_CLIENT_ID&response_type=code&scope=openid profile&redirect_uri=YOUR_REDIRECT_URI&nonce=12345

这至少应该确保您发出的请求具有正确的范围等。如果您希望在认证后读取该数据,您还应该确保您有一个分配了一些“元数据”的用户配置文件;)

【讨论】:

粘贴网址要求我登录。登录后,它会将我重定向到回调。 我不确定它与 php sdk 的关系如何 我的用户 user_metadata 设置为一个非常简单且有效的 json 对象字符串 您使用上述方法成功登录了吗?元数据是否在 id 令牌或用户配置文件中可用?如果你有一个带有 user_metadata: foo = "bar" 的个人资料,然后在上面添加一个额外的范围,上面有 "scope=openid profile foo" - 当你登录时会发生什么? 你知道,它的作用是将我重定向到回调,我没有看到其他任何事情发生。我应该将该网址粘贴到浏览器中对吗?

以上是关于获取 auth0 用户元数据作为用户信息的一部分的主要内容,如果未能解决你的问题,请参考以下文章

Auth0 规则 - 从 getUser() 读取元数据

Auth0 Laravel:验证令牌并获取用户信息

用户注册后获取 auth0 用户信息

如何在使用 auth0 进行身份验证的反应应用程序中获取用户信息

Auth0 - 使用用户信息丰富数据

从 API 中访问 Auth0 登录用户?