标签: auth0

授权0。如何获取用户的权限和角色?

我正在使用 Auth0 的免费计划。我已经阅读了大量不同的手册,但无法理解如何获得用户的权限。我已经设置了角色,为他们添加了权限,将此角色分配给了用户。我正在使用 05-Token-Renewal(来自 Auth0 示例)并且在 idTokenPayload 中我什至有图片,但没有权限。如何获得它们?

authentication authorization auth0

5
推荐指数
1
解决办法
272
查看次数

使用 Auth0 的钩子 useAuth0 在 Apollo 客户端中获取令牌并设置标头

您好,我正在尝试将 Auth0 的 spa 示例与 react 一起使用,我正在使用 useAuth0 钩子,我也在使用 Apollo 客户端进行查询,我需要获取令牌并将其设置在请求中,但是我没有t 能够设置它。

如果有人能指出我正确的方向,我将不胜感激。

我试图在查询/变异组件中使用上下文属性,但我无法弄清楚,也找不到有关如何使用它的信息。

apollo reactjs auth0 graphql react-hooks

5
推荐指数
1
解决办法
918
查看次数

赛普拉斯无法使用新的 auth0-spa-js 包请求 API 或显示内容

我尝试使用新包 ( https://github.com/auth0/auth0-spa-js )登录到 Auth0 。

尝试 1:我确实尝试了一个最佳实践,它使用cy.request()但看起来像新的auth0-spa-js包现在loginWithRedirect在请求 URL 中需要一个随机状态字符串(我没有,它是从函数生成的)。所以我不能在 Auth0 的 API 中调用登录

尝试 2:我设置"chromeWebSecurity": false,单击登录按钮 -> 我的网站被重定向到 Auth0 页面,URL 已正确加载,但 Auth0 拒绝auth0 url在框架中显示“ ”,因为祖先违反了以下内容安全策略指令:“框架-祖先‘无’”。

各位大侠有什么解决办法吗?

auth0 cypress

5
推荐指数
1
解决办法
399
查看次数

为什么 auth0 建议不要在 localStorage 中存储令牌?

Auth0 提供了大量资源列表,描述了身份验证的最佳实践。其中有一连串建议不要localStorage用作存储 (JWT) 令牌的手段。

我发现这些点有几个问题:

  • 强烈假设 JWT 令牌是攻击者不得访问的敏感信息(通过 XSS)
    • 从我的角度来看,访问令牌本身并没有扩大攻击范围。如果攻击者可以控制受害者的浏览器,他们可以使用令牌从受影响的浏览器本身执行调用。
    • 访问令牌通常具有相当短的到期时间,并且它们可以被浏览器固定,从而减少在 XSS 上下文之外使用它们的机会。
  • Auth0 建议使用auth0.getTokenSilently()他们的 SDK 来获取令牌,但据我所知,攻击者没有任何理由不能自己调用​​这个方法(即注入另一个 sdk 脚本,使用现有的客户端密钥,并且只是调用getToken 从那里),从而以几乎相同的方式获取令牌,就好像它存储在localStorage
  • 我知道 XSS 无法访问令牌的唯一方法基本上是使用 httpOnly cookie,但这本身会创建新的向量 (CSRF),并且仍然无法阻止攻击者从受影响的浏览器中调用 api。

所以我完全同意 OWASP 的建议,不要将敏感数据localStorage存储在 . 但这只是因为这些东西会允许攻击者扩大攻击范围(访问银行帐户,尝试在其他应用程序中重复使用用户的密码等)。但我很难看出 accessTokens 是如何受此影响的。

jwt single-page-application auth0

5
推荐指数
1
解决办法
1045
查看次数

如何使用 Cypress 和 Auth0 测试单页应用程序

我有一个隐藏在 Auth0 锁后面的单页应用程序,使用@auth0/auth0-spa-js。我想使用 Cypress 对其进行测试,因此我决定关注Auth0官方博客文章以及 Johnny Reilly博客文章

我能够使用建议的请求从 auth0 成功检索有效的 JWT 令牌。我不知道该怎么办:(

我面临的问题是,上述两种方法都依赖于应用程序在本地存储 JWT 令牌(在 cookie 或 localstorage 中)。然而,@auth0/auth0-spa-js使用不同的方法,我假设所有相关的 cookie/localstorage 都存储在 auth0 域中。

你有什么想法,如果有办法绕过它吗?

2018 年 7 月这里报告一个类似的问题,没有真正提供任何解决方案

auth0 cypress auth0-lock

5
推荐指数
1
解决办法
3911
查看次数

React:如何模拟 Auth0 以使用 Jest 进行测试

我正在使用 React(react-create-app 和 TypeScript)。使用 Auth0 进行登录。

我想用 Jest 编写测试,我发现这个资源基本上是唯一关于模拟 Auth0 对象的内容。

所以我的代码看起来像这样:

import React from "react";
import ReactDOM from "react-dom";
import TopBar from "./index";
import {
  useAuth0
} from "react-auth0-spa";

const user = {
  email: "johndoe@me.com",
  email_verified: true,
  sub: "google-oauth2|12345678901234"
};

// intercept the useAuth0 function and mock it
jest.mock("react-auth0-spa");

describe("First test", () => {
  beforeEach(() => {
    // Mock the Auth0 hook and make it return a logged in state
    useAuth0.mockReturnValue({
      isAuthenticated: true,
      user,
      logout: jest.fn(),
      loginWithRedirect: jest.fn()
    }); …
Run Code Online (Sandbox Code Playgroud)

javascript typescript reactjs jestjs auth0

5
推荐指数
3
解决办法
3928
查看次数

页面刷新时 Vue SPA 中的 Auth0 客户端为空

我有一个基于 Auth0 的快速入门应用程序之一的 Vue SPA(https://github.com/auth0-samples/auth0-vue-samples)。开箱即用,一切正常,但是一旦我尝试在组件代码中使用 Auth0 客户端,我就会遇到问题。我遵循了“调用 API”教程(https://auth0.com/docs/quickstart/spa/vuejs/02-calling-an-api),它无助地只展示了如何使用按钮调用 API。我想要做的是在初始页面加载时触发对我的 API 的经过身份验证的调用,以便我可以确保某些数据存在于我自己的 API 中(如果没有,则创建它)。这看起来应该很简单。我只是将这段代码扔到我创建的 Vue 组件钩子中:

await this.$auth.getTokenSilently().then((authToken) => {
    // reach out to my API using authToken
});
Run Code Online (Sandbox Code Playgroud)

如果应用程序从我的 npm 开发服务器热重新加载,这实际上可以正常工作,它会访问我的 API,该 API 使用令牌授权请求,并发回正确的数据。问题是当我手动重新加载页面时,这会导致:

Uncaught (in promise) TypeError: Cannot read property 'getTokenSilently' of null
    at Vue.getTokenSilently (authWrapper.js?de49:65)
    at _callee$ (App.vue?234e:49)
Run Code Online (Sandbox Code Playgroud)

在 authWrapper.js 文件(Auth0 客户端所在的位置)中,函数调用如下:

getTokenSilently(o) {
    return this.auth0Client.getTokenSilently(o);
}
Run Code Online (Sandbox Code Playgroud)

当我调试调用时,“auth0Client”不存在,这就是它失败的原因。我无法理解的是在我尝试拨打电话之前确保它确实存在的正确方法。样本中没有任何内容表明执行此操作的正确方法。我尝试将我的组件代码放在不同的组件和不同的 Vue 生命周期钩子(created、beforeMount、mounted 等)中,所有结果都相同。客户端成为后800毫秒左右可用,但不是这个代码执行时。

这显然是一个时间问题,但我不清楚如何告诉我的组件代码坐下来等待 this.auth0Client 为非空而不做一些像 setInterval 那样可怕和骇人听闻的事情。

javascript authentication single-page-application vue.js auth0

5
推荐指数
1
解决办法
570
查看次数

使用 Auth0 登录成功,但仍返回 401“访问被拒绝”?

我设法让 Auth0 对我的 Vue.js 应用程序有些作用。快速入门指南很简单。所以发生的事情是我设法使用了登录功能并被提示使用 Auth0 登录对话框。我使用我的 google 帐户进行了快速登录。这也奏效了。我的 google 帐户现在在我的 Auth0 仪表板中显示为新用户。

然而,登录后我返回到我的 Vue.js 应用程序,但授权似乎没有成功。

网络选项卡告诉我以下内容:

{"error":"access_denied","error_description":"Unauthorized"}
Run Code Online (Sandbox Code Playgroud)

我想知道在用户被视为“授权”之前我是否必须给他一些角色或权限?我的印象是默认情况下这将是正确的,并且只有在我开始在 Auth0 仪表板中定义角色时才会受到限制。

请赐教!

PS:我在处理 SPA 时正在使用 Auth0 提供的非隐式登录对话框。我读到可能会引起麻烦?

附注 2: 在此处输入图片说明

以及“失败交换”日志的原始数据:

{
  "date": "2020-08-24T10:43:52.005Z",
  "type": "feacft",
  "description": "Unauthorized",
  "connection_id": "",
  "client_id": "<Client_ID>",
  "client_name": null,
  "ip": "85.197.56.111",
  "user_agent": "Chrome 83.0.4103 / Linux 0.0.0",
  "details": {
    "code": "*************T8a"
  },
  "hostname": "alemanni-game.eu.auth0.com",
  "user_id": "",
  "user_name": "",
  "log_id": "90020200824104353383000015217913666506642073534760747026",
  "_id": "90020200824104353383000015217913666506642073534760747026",
  "isMobile": false
}
Run Code Online (Sandbox Code Playgroud)

auth0

5
推荐指数
1
解决办法
511
查看次数

类型错误:“秘密”是必需的

使用 express-openid-connect 时出现此错误

TypeError: "secret" is required
    at module.exports.get (/home/mathkr/persodev/node_modules/express-openid-connect/lib/config.js:166:11)
    at module.exports (/home/mathkr/persodev/node_modules/express-openid-connect/middleware/auth.js:27:18)
    at Object.<anonymous> (/home/mathkr/persodev/server.js:26:9)
Run Code Online (Sandbox Code Playgroud)

我的server.js代码是

const express = require('express');
const app = express();
const port = process.env.PORT || 4200;
const {auth, requiresAuth} = require('express-openid-connect');
const dotenv = require('dotenv');
const session = require('express-session');

const sess = {
  secret: 'somethingsecret',
  cookie: {},
  resave: false,
  saveUninitialized: true
};
if (app.get('env') === 'production') {
  sess.cookie.secure = true;
  app.set('trust proxy', 1);
}
app.use(session(sess));

const config = {
  ...(dotenv.config()).parsed,
  authRequired: false,
  auth0Logout: …
Run Code Online (Sandbox Code Playgroud)

node.js express auth0

5
推荐指数
1
解决办法
752
查看次数

'无法从程序集'Microsoft.Extensions.Primitives'加载类型'Microsoft.Extensions.Primitives.InplaceStringBuilder'

我正在开发一个 ASP.NET Core v2.1 Razor Pages 项目,在该项目中我正在实施 Auth0 以进行用户身份验证。设置完所有内容后,我尝试构建我的项目,但出现以下异常:

System.TypeLoadException: 'Could not load type 'Microsoft.Extensions.Primitives.InplaceStringBuilder' 
from assembly 'Microsoft.Extensions.Primitives, Version=5.0.0.0, Culture=neutral, 
PublicKeyToken=adb9793829ddae60'.'
Run Code Online (Sandbox Code Playgroud)

为了设置 Auth0,我必须安装 Microsoft.Extensions.Primitives nuget 包。但是,在尝试构建我的项目时,这是我得到的错误。如果我删除包,当我尝试构建项目时,我会收到以下错误:

Version conflict detected for Microsoft.Extensions.Primitives. Install/reference 
Microsoft.Extensions.Primitives 5.0.0 directly to your project to resolve this issue.
Run Code Online (Sandbox Code Playgroud)

以下代码是抛出异常的地方:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}
Run Code Online (Sandbox Code Playgroud)

我已经读到 Microsoft.Extensions.Primitives 中不再存在 InplaceStringBuilder,所以我假设这是导致问题的原因。但是,我没有看到 InplaceStringBuilder 在任何地方使用,所以我似乎无法弄清楚它甚至需要什么。

有谁知道解决这个问题的方法?

c# auth0 asp.net-core

5
推荐指数
1
解决办法
2677
查看次数