Javascript Auth0管理/用户范围

Javascript Auth0管理/用户范围,javascript,authentication,scope,auth0,Javascript,Authentication,Scope,Auth0,我目前正在学习Auth0教程,位于以下位置: 我很难理解管理用户上下文中的作用域概念 具体来说,以下文本 由于此范围表示用户对数据具有只读访问权限, 可以认为该用户具有某种“普通用户” 访问级别 如果希望某些用户对同一资源具有写访问权限, 因此,您可能需要某种“管理员”访问级别 考虑引入一个写:消息的范围。 通过将write:messages作为作用域添加到我的控制面板中的api,可以为每个用户请求并设置它 这感觉一点也不对劲。所以我试图通过规则来解决这个问题 function (user,

我目前正在学习Auth0教程,位于以下位置:

我很难理解管理用户上下文中的作用域概念

具体来说,以下文本

由于此范围表示用户对数据具有只读访问权限, 可以认为该用户具有某种“普通用户” 访问级别

如果希望某些用户对同一资源具有写访问权限, 因此,您可能需要某种“管理员”访问级别 考虑引入一个写:消息的范围。

通过将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_元数据对象中,我给了我的admin用户admin角色。此规则有效,现在登录时,dev工具中显示的范围是“write:messages”

但是,现在已经删除了初始作用域,例如“openid read:messages”等

我到底错在哪里?如果用户是管理员,我想将add分配给现有作用域


对于作用域/声明,这是正确的过程吗?

理解作用域概念及其存在原因的最佳方法是理解JWT的基本思想。Auth0 jwt只是一个巨大的散列键,可以转换成JSON。我真的可以拿任何jwt,去他们的网站上的,把它放在那里,看到所有的数据集的令牌。我可以对它进行编辑,散列值将更改

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

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

什么是作用域?

因此,Auth0所做的尝试和简化工作是,当您登录时,请求您想要返回的令牌上的作用域。范围只是JWT的一个属性

requestedScopes='openid概要文件读取:消息写入:消息';
auth0=new auth0.WebAuth({
// ...
作用域:this.requestedScopes
});
在本例中,您表示希望从令牌获取此信息。您需要他们的配置文件信息,并且需要登录用户提供这些作用域。登录后,您将得到一个对象作为响应。它将有一个名为scopes的属性。如果scopes属性为空,则表示登录的用户已将所有这些作用域分配给他们。如果登录的用户的作用域比您请求的多,则scopes属性将为其分配额外的标记

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

作用域和应用程序元数据之间的差异

应用程序元数据的不同之处在于它是配置文件的一部分。您可以看到它与配置文件不同。只能使用管理API在令牌上设置应用程序元数据。这意味着只有您的服务器可以更改该信息

因此,作用域和应用程序元数据为您提供了两种处理用户在您的站点上拥有的不同权限的方法。您还可以在应用程序元数据中声明这是一个管理员,并让他们在您的客户端上执行管理员操作

与管理API相关的范围

有时您的服务器需要使用管理API,这意味着它也需要令牌。该令牌可以具有Auth0预定义的作用域,以确定您允许它访问哪些端点

Auth0为其api使用作用域的方式应该让您非常清楚如何使用它们

记住:

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

    • 理解作用域概念及其存在原因的最佳方法是理解JWT的基本思想。Auth0 jwt只是一个巨大的散列键,可以转换成JSON。我真的可以拿任何jwt,去他们的网站上的,把它放在那里,看到所有的数据集的令牌。我可以对它进行编辑,散列值将更改

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

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

      什么是作用域?

      因此,Auth0所做的尝试和简化工作是,当您登录时,请求您想要返回的令牌上的作用域。范围只是JWT的一个属性

      requestedScopes='openid概要文件读取:消息写入:消息';
      auth0=new auth0.WebAuth({
      // ...
      作用域:this.requestedScopes
      });
      
      在本例中,您表示希望从令牌获取此信息。您需要他们的配置文件信息,并且需要来自