Auth0 - 规则 & 组 && 用户管理
Posted
技术标签:
【中文标题】Auth0 - 规则 & 组 && 用户管理【英文标题】:Auth0 - Rules & Groups && User Management 【发布时间】:2017-05-25 09:01:51 【问题描述】:我已经使用 Auth0 创建了一个帐户,我正在尝试让 Angular 2 简单地登录到我们的后端 API。
1。我正在尝试做的是能够访问 API 中的角色以查看用户是否具有正确的权限。
我已经启用了 Auth0 授权扩展我已经进入并创建了一个组和一个角色,我已将这些分配给我创建的测试用户,然后我进入配置并发布了令牌内容的规则和持久性。
如何在 nodejs 应用程序中查看 JWT 的权限/组?我正在使用express-jwt
这个:
const authenticate = jwt(
secret: config.get('AUTH0_CLIENT_SECRET'),
audience: config.get('AUTH0_CLIENT_ID'),
credentialsRequired: false,
);
这给了我诸如 iss、sub、aud 之类的详细信息。但是没有关于用户元数据的详细信息,我如何才能检索到这个?另外,由于我之前显然没有使用过 Auth0,最好的做法是将用户详细信息存储在我们自己的数据库中,这样我就可以使用自己的 ID 来存储用户操作,或者如果 Auth0 给出一个 ID,是否可以使用 ID在我们的数据库中存储用户操作。
编辑 1
好的,我可以看到 Lock 有一个选项参数,您可以在其中传递作用域,登录时请求这些参数是不是不好的做法?现在只有少数组/角色。或者更好的是 API 可以使用提供的令牌来查找用户以获取 app_metadata 以查看权限等,如果可以,我该如何查找?
2。我如何管理和查看用户,以便在我们自己的管理面板中显示他们并管理他们拥有的权限。
【问题讨论】:
【参考方案1】:如果组和角色信息在令牌本身中可用(如groups
和roles
声明)并且假设您使用的是express-jwt
,那么您可以在服务器端访问此信息通过访问:
req.user.groups
req.user.roles
实质上,express-jwt
将使令牌中包含的声明在 req.user
对象中可用。
关于您用于识别用户的 ID,您可以使用用户令牌的 sub
声明中包含的值。此值保证是唯一且稳定的,因此以完全相同的方式使用身份验证的重复用户将始终在 sub
声明中具有相同的值。
您已经发现包含组和角色信息的一种方法是通过scope
参数请求它。请求将此信息包含在令牌中并不是一个坏习惯,但是,您需要考虑到通过 SPA 使用的隐式授权传递的令牌包含在回调 URL 的一部分中,因此它们的最大值大小受到 URL 的限制。
关于您的第二个问题,您可以通过集成 Auth0 授权扩展 API 和 Auth0 管理 API 来实现自己的管理后端;有关详细信息,请参阅以下链接:
https://auth0.com/docs/extensions/authorization-extension#enabling-api-access https://auth0.com/docs/api/management/v2【讨论】:
关于第一部分,你说我需要考虑SPA使用的隐式授权。我是这种 auth0/oauth 用户身份验证方式的新手,您介意再解释一下吗?有没有另一种方法,目前 Angular2 应用程序使用 auth0 锁,然后使用 JWT 向 API 发送请求,我应该通过 API 登录并且 API 向 auth0 发送请求吗?使用 auth0 iss 存储在我们的数据库中是一种好习惯,还是最好在我们端复制用户以匹配用户?谢谢 通过隐式授权,令牌作为重定向 URL 的一部分返回,类似于https://[yourdomain]/callback#[token_param_name]=[token_value]
。在前面的示例中,URL 的长度主要取决于 [token_value]
的内容,因此如果您要求令牌中包含大量信息,您需要考虑它是否会导致 URL 大小出现问题。您可以将 Auth0 用户标识符 sub
声明存储在您的数据库中,因为它唯一地标识了用户。
谢谢。我正在运行 Angular 2 Auth0 演示,但看不到回调的设置位置或方式。是否有隐式授权的替代方案,或者是最简单的解决方案。您知道可能使 URL 变大的内容限制是什么吗?谢谢
如果您使用的是 Auth0.js 或 Lock,如果您没有明确执行,他们会为您设置回调。查看SO question 了解有关 URL 限制的信息。以上是关于Auth0 - 规则 & 组 && 用户管理的主要内容,如果未能解决你的问题,请参考以下文章