Auth0 管理员/用户范围
Auth0 Admin / User Scopes
我目前正在学习位于此处的 Auth0 教程:
https://auth0.com/docs/quickstart/spa/react/04-authorization
并且正在努力理解管理员用户上下文中范围的概念。
具体来说,下面的文字...
Since this scope indicates that the user has read-only access to data,
it might be considered that the user has some kind of "regular user"
access level.
If you wanted some users to have write access to the same resource,
and therefore some kind of "administrator" access level, you might
consider introducing a scope of write:messages.
通过在我的控制面板中将 write:messages 作为范围添加到 api,它被请求并为每个用户设置。
这感觉一点都不对。所以我试图通过规则来解决这个问题。
function (user, context, callback) {
if(user.app_metadata.roles.indexOf('admin') > -1) {
console.log(context);
context.accessToken.scope = 'write:messages';
}
callback(null, user, context);
}
在我的 app_metadata 对象中,我已将管理员角色授予我的管理员用户。此规则有效,现在登录时,开发工具中显示的范围是 'write:messages'.
但是,现在初始范围已被删除,例如 'openid read:messages' 等
我哪里错了?如果用户是管理员,我想将添加分配给现有范围。
对于范围/声明,这甚至是正确的过程吗?
理解作用域概念及其存在原因的最佳方式是理解 JWT 的基本思想。 Auth0 jwt 只是一个巨大的哈希键,可以变成 JSON。我真的可以接受任何 jwt,转到他们网站上的 debugger 并将其放在那里,然后查看该令牌上的所有数据集。我可以对其进行编辑,哈希值将会改变。
Scopes 是指您可以在 JSON 中拥有属性,它可以告诉您的 React 应用程序它们可以去哪里或不能去哪里。问题是任何人都可以使用他们的令牌并编辑范围以进入您应用程序的某些部分。
他们之所以伟大,是因为即使一个人要那样做,他们也真的什么也做不了。第二次他们试图更改他们必须请求您的服务器的任何内容。这就是 jwt 秘密的用途。它会知道有人篡改了在 HTTP 请求中发送的令牌 header,他们的请求将被拒绝。
什么是范围?
因此,Auth0 所做的尝试和简化事情的一点是,当您登录时,您请求您想要取回的令牌上的范围。作用域只是一个 属性 一个 JWT。
requestedScopes = 'openid profile read:messages write:messages';
auth0 = new auth0.WebAuth({
// ...
scope: this.requestedScopes
});
在这个例子中,你是说你想从令牌中获取这个信息。您需要他们的个人资料信息,并且需要登录用户的这些范围。登录后,您将收到 object 作为响应。它将有一个 属性 称为作用域。如果范围 属性 为空,则意味着登录的用户已分配给他们所有这些范围。如果登录用户的范围比您请求的范围多,则范围 属性 将分配给它们额外的标签。
它是这样设计的,因为标准用户将拥有所有基本权限,但管理员将拥有其他填充在范围内的其他权限 属性 你回来。
作用域与app-metadata
的区别
应用元数据的不同之处在于它是配置文件的一部分。 Check out this token I created with scopes attached to it。您可以看到它与配置文件不同。只能使用管理 API 在令牌上设置应用元数据。这意味着只有您的服务器可以更改该信息。
因此,范围和 app_metadata 为您提供了两种方式来处理人们在您网站上拥有的不同权限。您也可以在应用元数据中声明这是管理员,让他们在您的客户端上执行管理操作。
与管理相关的范围API
有时您的服务器需要使用管理 API,这意味着它也需要一个令牌。该令牌可以具有 Auth0 预定义的范围,以确定您允许它访问哪些端点。 Check out the management API explorer and see how these scopes play a part.
Auth0 为他们的 api 使用作用域的方式应该会让你很好地了解你可以用它们做什么。
记住:
- 可以更改 jwt,但签名无效。
- 没有办法(完全)保护用户在您的客户端上所做的事情。
- 范围和应用元数据帮助您保护用户可以在您的服务器上执行的操作。
- 对客户保密
我目前正在学习位于此处的 Auth0 教程:
https://auth0.com/docs/quickstart/spa/react/04-authorization
并且正在努力理解管理员用户上下文中范围的概念。
具体来说,下面的文字...
Since this scope indicates that the user has read-only access to data, it might be considered that the user has some kind of "regular user" access level.
If you wanted some users to have write access to the same resource, and therefore some kind of "administrator" access level, you might consider introducing a scope of write:messages.
通过在我的控制面板中将 write:messages 作为范围添加到 api,它被请求并为每个用户设置。
这感觉一点都不对。所以我试图通过规则来解决这个问题。
function (user, context, callback) {
if(user.app_metadata.roles.indexOf('admin') > -1) {
console.log(context);
context.accessToken.scope = 'write:messages';
}
callback(null, user, context);
}
在我的 app_metadata 对象中,我已将管理员角色授予我的管理员用户。此规则有效,现在登录时,开发工具中显示的范围是 'write:messages'.
但是,现在初始范围已被删除,例如 'openid read:messages' 等
我哪里错了?如果用户是管理员,我想将添加分配给现有范围。
对于范围/声明,这甚至是正确的过程吗?
理解作用域概念及其存在原因的最佳方式是理解 JWT 的基本思想。 Auth0 jwt 只是一个巨大的哈希键,可以变成 JSON。我真的可以接受任何 jwt,转到他们网站上的 debugger 并将其放在那里,然后查看该令牌上的所有数据集。我可以对其进行编辑,哈希值将会改变。
Scopes 是指您可以在 JSON 中拥有属性,它可以告诉您的 React 应用程序它们可以去哪里或不能去哪里。问题是任何人都可以使用他们的令牌并编辑范围以进入您应用程序的某些部分。
他们之所以伟大,是因为即使一个人要那样做,他们也真的什么也做不了。第二次他们试图更改他们必须请求您的服务器的任何内容。这就是 jwt 秘密的用途。它会知道有人篡改了在 HTTP 请求中发送的令牌 header,他们的请求将被拒绝。
什么是范围?
因此,Auth0 所做的尝试和简化事情的一点是,当您登录时,您请求您想要取回的令牌上的范围。作用域只是一个 属性 一个 JWT。
requestedScopes = 'openid profile read:messages write:messages';
auth0 = new auth0.WebAuth({
// ...
scope: this.requestedScopes
});
在这个例子中,你是说你想从令牌中获取这个信息。您需要他们的个人资料信息,并且需要登录用户的这些范围。登录后,您将收到 object 作为响应。它将有一个 属性 称为作用域。如果范围 属性 为空,则意味着登录的用户已分配给他们所有这些范围。如果登录用户的范围比您请求的范围多,则范围 属性 将分配给它们额外的标签。
它是这样设计的,因为标准用户将拥有所有基本权限,但管理员将拥有其他填充在范围内的其他权限 属性 你回来。
作用域与app-metadata
的区别应用元数据的不同之处在于它是配置文件的一部分。 Check out this token I created with scopes attached to it。您可以看到它与配置文件不同。只能使用管理 API 在令牌上设置应用元数据。这意味着只有您的服务器可以更改该信息。
因此,范围和 app_metadata 为您提供了两种方式来处理人们在您网站上拥有的不同权限。您也可以在应用元数据中声明这是管理员,让他们在您的客户端上执行管理操作。
与管理相关的范围API
有时您的服务器需要使用管理 API,这意味着它也需要一个令牌。该令牌可以具有 Auth0 预定义的范围,以确定您允许它访问哪些端点。 Check out the management API explorer and see how these scopes play a part.
Auth0 为他们的 api 使用作用域的方式应该会让你很好地了解你可以用它们做什么。
记住:
- 可以更改 jwt,但签名无效。
- 没有办法(完全)保护用户在您的客户端上所做的事情。
- 范围和应用元数据帮助您保护用户可以在您的服务器上执行的操作。
- 对客户保密