【问题标题】:Auth0 Admin / User ScopesAuth0 管理员/用户范围
【发布时间】:2017-07-12 20:24:23
【问题描述】:

我目前正在学习 Auth0 的教程,位于此处:

https://auth0.com/docs/quickstart/spa/react/04-authorization

并且在管理员用户的上下文中努力理解范围的概念。

具体如下...

由于此范围表明用户对数据具有只读访问权限, 可能会认为用户有某种“普通用户” 访问权限。

如果您希望某些用户对同一资源具有写入权限, 因此某种“管理员”访问级别,您可能 考虑引入 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' 等

我到底哪里错了?如果用户是管理员,我想将添加分配给现有范围。

对于范围/声明,这甚至是正确的过程吗?

【问题讨论】:

    标签: javascript authentication scope auth0


    【解决方案1】:

    了解作用域概念及其存在原因的最佳方法是了解 JWT 的基本概念。 Auth0 jwt 只是一个可以变成 JSON 的巨大哈希键。我真的可以使用任何 jwt,转到他们网站上的 debugger 并将其放入其中并查看该令牌上的所有数据集。我可以对其进行编辑,哈希值会改变。

    作用域是你可以在 JSON 中拥有属性的想法,它可以告诉你的 React 应用程序它们可以去哪里或不能去哪里。问题是任何人都可以获取他们的令牌并编辑范围以进入您的应用程序的某些部分。

    让他们伟大的是,即使一个人这样做,他们真的什么也做不了。他们第二次尝试更改他们必须请求您的服务器的任何内容。这就是 jwt 秘密的用途。它会知道有人篡改了在 HTTP 请求标头中发送的令牌,并且他们的请求将被拒绝。

    什么是作用域?

    所以 Auth0 所做的尝试和简化一些事情是,当您登录时,您请求要取回的令牌的范围。范围只是 JWT 的一个属性。

    requestedScopes = 'openid profile read:messages write:messages';
    
    auth0 = new auth0.WebAuth({
      // ...
      scope: this.requestedScopes
    });
    

    在本例中,您说您想从令牌中获取此信息。您想要他们的个人资料信息,并且您想要登录用户的这些范围。登录后,您将获得一个对象作为响应。它将有一个名为 scopes 的属性。如果 scopes 属性为空,则表示登录的用户拥有分配给他们的所有这些范围。如果登录用户的范围比您请求的范围多,则范围属性将分配给他们额外的标签。

    之所以这样设计,是因为标准用户将拥有所有基本权限,但管理员将拥有其他权限,这些权限将填充在您返回的范围属性中。

    范围和应用元数据的区别

    应用元数据的不同之处在于它是配置文件的一部分。 Check out this token I created with scopes attached to it。您可以看到它与配置文件不同。只能使用管理 API 在令牌上设置应用元数据。这意味着只有您的服务器可以更改该信息。

    因此,范围和 app_metadata 为您提供了两种方式来处理人们在您的网站上拥有的不同权限。您也可以只在应用元数据中声明这是管理员,然后让他们在您的客户端上执行管理工作。

    与 Management API 相关的范围

    有时您的服务器需要使用管理 API,这意味着它也需要一个令牌。该令牌可以具有 Auth0 预定义的范围,以确定您允许它访问的端点。 Check out the management API explorer and see how these scopes play a part.

    Auth0 为他们的 api 使用作用域的方式应该让你很好地了解你可以用它们做什么。

    记住:

    • 可以更改 jwt,但签名无效。
    • 没有办法(完全)保护用户在您的客户端上所做的事情。
    • 范围和应用元数据可帮助您保护用户可以在您的服务器上执行的操作。
    • 对客户保密

    【讨论】:

    • 是的!没问题!
    • 感谢您的信息。我仍然觉得我们把这弄得复杂了。安全性不应该这么难破译。
    • @Maccurt 如果你能设计出更简单的东西来实现相同的目标,整个行业都会非常兴奋。
    猜你喜欢
    • 2022-01-06
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 2014-03-04
    • 2017-06-26
    • 1970-01-01
    相关资源
    最近更新 更多