标签: auth0

单页应用程序的身份验证

背景

我正在查看 OAuth 2.0 隐式授权流程,其中用户被重定向到身份验证服务,并且 JWT 令牌被发送回单页应用程序 (SPA)。令牌存储在 cookie 或本地存储中,在我看到的示例中,应用程序将根据是否可以在存储中找到令牌来隐藏/显示某些页面。

问题

问题是,在所有示例(来自服务提供商的官方示例)中,我能够手动将任何随机但格式正确的令牌添加到浏览器的本地存储中,并访问“安全”页面。

有人向我解释说,您无法在 SPA 中验证令牌,因为这需要暴露客户端机密,并且您应该在 API 服务器上验证令牌。这意味着您可以“隐藏”页面,但如果有人愿意,也很容易看到它们。话虽如此,您不太可能造成任何真正的损害,因为任何数据检索或操作都需要通过 API 服务器,并且应该在那里验证令牌。

这并不是真正的漏洞,但我看到的文档和示例并没有明确涵盖这种细微差别,我认为它可能会导致天真的程序员(比如我自己)认为某些页面是完全安全的,但实际上情况并非如此。

问题

如果有比我更了解情况的人确认这确实是 SPA 身份验证的工作原理,我将不胜感激。

authentication oauth-2.0 reactjs auth0

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

Auth0 中通用登录的自定义字段

Auth0如果我想在注册表中添加名字和姓氏字段,是否必须使用“锁定” ,或者我也可以通过通用登录在注册中添加这些附加字段吗?

auth0

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

尝试使用 Auth0 对用户进行身份验证时出现 CORS 错误

编辑

\n

可复制的仓库在这里

\n

我知道这些信用信息永远不应该出现在互联网上,但我在这里感到绝望+无论如何我都会在之后删除客户/租户。

\n
\n

我设置了一条路线:

\n
router.get(\'/login\', cors, async (req, res) => {\n    try {\n        console.log(\'Entered\')\n        await auth0.handleLogin(req, res)\n    } catch (err) {\n        return res.status(500).end()\n})\n
Run Code Online (Sandbox Code Playgroud)\n

线路Entered被打印出来,但是我不断发现 cors 错误,

\n
Access to XMLHttpRequest at \'https://dev-..\' (redirected from \'http://localhost:3000/login\')\n from origin \'http://localhost:3000\' has been blocked by CORS policy: No \'Access-Control-Allow-Origin\' header is present on the requested resource.\n
Run Code Online (Sandbox Code Playgroud)\n

我已经把头发拉了好几个 h\xcc\xb6o\xcc\xb6u\xcc\xb6r\xcc\xb6s\xcc\xb6 天了。

\n

我不确定为什么No \'Access-Control-Allow-Origin\' header is present on the requested resource会出现错误,因为我已经添加了cors包添加到我的自定义 Express …

cors auth0 next.js

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

调试“checks.state 参数丢失”错误 AUTH0

我刚刚部署了新的 NextJs 博客应用程序https://blog.devdeveloper.ca/部署到 Vercal,但在使 auth0 正常工作时遇到问题。单击屏幕右上角的登录按钮时,用户将被重定向到 auth0 以完成身份验证流程。

在身份验证后重定向回我的应用程序时,我收到一个错误(checks.state 参数丢失),并且我似乎无法找到它发生的位置。

错误

我发现这篇文章描述了 google chrome 在 2020 年对 SameSite 属性进行的更新。看来这可能与此有关,因为在我的控制台中我收到以下警告。

SameSite 属性错误

我想知道我的登录处理程序中是否缺少一些配置选项。

import { handleAuth, handleLogin } from '@auth0/nextjs-auth0';

export default handleAuth({
    async login(req, res) {
        try {
            await handleLogin(req, res, {
                authorizationParams: {
                    audience: `http://localhost:5000/`, // or AUTH0_AUDIENCE
                    // Add the `offline_access` scope to also get a Refresh Token
                    scope: 'openid profile email create:category delete:category update:category create:post update:post delete:post create:comment delete:comment', // or AUTH0_SCOPE
                    response_type: …
Run Code Online (Sandbox Code Playgroud)

javascript oauth-2.0 auth0 next.js

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

Nextjs Auth0在getServerSideProps中获取数据

我使用 Auth0 来验证用户身份。

我受保护的 api 路由如下:

// pages/api/secret.js

import { withApiAuthRequired, getSession } from '@auth0/nextjs-auth0';

export default withApiAuthRequired(function ProtectedRoute(req, res) {
  const session = getSession(req, res);
  const data = { test: 'test' };
  res.json({ data });
});
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我尝试从 getServerSideProps 获取数据时,我收到 401 错误代码。

如果我使用 useEffect 我可以从 api 路由获取数据。

我试图像这样获取数据:

export const getServerSideProps = withPageAuthRequired({
  async getServerSideProps(ctx) {
    const res = await fetch('http://localhost:3000/api/secret');
    const data = await res.json();

    return { props: { data } };
  },
});
Run Code Online (Sandbox Code Playgroud)

我收到以下响应:错误:“not_authenticated”,描述:“用户没有活动会话或未经过身份验证”

大家有什么想法吗?谢谢!!

authentication auth0 next.js

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

在 python 中验证并解析 Auth0 JWT 令牌

当有人通过 Auth0 登录我的网站时,我会从 Auth0 获取 JWT 令牌。该令牌告诉我此人的 UID,并允许我从前端向后端进行 API 调用,在后端我可以验证 JWT 令牌以确保请求来自已登录的用户。

https://jwt.io上,您可以粘贴任何 JWT 令牌,它会解析它并验证签名。

有谁知道我如何在 python 中做到这一点?

Auth0 没有给我 JWT 令牌的私钥,所以我无法使用jwt.decode().

相反,我需要以某种方式用它的公钥解析 JWT 令牌,但我不确定如何在 python 中检索它。

这是 JWT 令牌:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImZneF9xWEJVNWt0ZzZXSlNLdTJIdiJ9.eyJuaWNrbmFtZSI6ImpvaG5fbWFyayIsIm5hbWUiOiJqb2huX21hcmtAb3V0bG9vay5jb20iLCJwaWN0dXJlIjoiaHR0cHM6Ly9zLmdyYXZhdGFyLmNvbS9hdmF0YXIvNTMxZmJlZjcxN2I1NzVmYjU3MGJlYzcxNTBlOWQ4MTA_cz00ODAmcj1wZyZkPWh0dHBzJTNBJTJGJTJGY2RuLmF1dGgwLmNvbSUyRmF2YXRhcnMlMkZqby5wbmciLCJ1cGRhdGVkX2F0IjoiMjAyMi0wNC0wNVQxNDoyMzozNy42NTFaIiwiZW1haWwiOiJqb2huX21hcmtAb3V0bG9vay5jb20iLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImlzcyI6Imh0dHBzOi8vZGV2LW44Z2h5a3lvLnVzLmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHw2MTdiZTllMzJhMmYyNjAwNmEzZDlhM2EiLCJhdWQiOiIwUGwwR1F5cFhjNkZEakxhb0JuSjhzOEtNZjVKZ3J4bSIsImlhdCI6MTY0OTE2ODYyMiwiZXhwIjoxNjQ5MjA0NjIyLCJub25jZSI6IlJuTjBmbFoyU0Vkck4wSkhRV1EyY21FMk1rNUpXVlUzTW1jM2RtaHlXVkJWYm5oalowMUNUR1paU3c9PSJ9.NQBQPoEj6wzYzclrQzXAWh124gyg_Nf1UYZR4lAuqHZ-fdFycrBMA0Y0dBSvQ-WI7YZOMAPjCRK0nuxKzj9kMQ0c-3finCgsl411tX5tvaX_Khe116le_eyBV28aQQLjqT0zvLaSgIYaJqcgshQ1bYvJp8UXPf8GkMWCD89pnqYPwexx9nsWjrnikInLY9oSbWYN1zA7DxwhygI_JeQc6Cvu6pl1xq8m_WZaCMSOJS2umyl_7vfA84cDX1Zz8aVWEOMinnbmR48sY79cEiIMplcYJA3QH4yFEawSWbzWnVUcv9VCgCJ7fCbqikF86fz2TrWYrI6eATJoVHOXDNDKwA
Run Code Online (Sandbox Code Playgroud)

jwt auth0 jwk

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

Auth0-登录小部件不显示企业连接

我使用入门模板创建了Auth0应用-混合移动应用>离子> ASP.NET Web API

我已经按照文档创建了到我的组织IDP(在本例中为Okta)的企业连接,并且已经成功测试了该连接。但是,登录小部件不显示以下连接选项:登录小部件

我似乎找不到任何有关如何向小部件添加更多连接的文档。查看代码,该项目似乎正在使用Auth0 angular,但是我也看不到任何东西。我知道引导代码正在导入锁定库-但是我看不到在任何地方调用的锁定方法,因此我不确定是否使用Auth0锁定小部件。

在这里的任何帮助将不胜感激!

angularjs ionic-framework auth0

0
推荐指数
1
解决办法
408
查看次数

Angular2 - EXCEPTION:无法读取未定义的属性'af'

我正在构建一个Angular2应用程序,使用Auth0进行身份验证,使用AngularFire进行数据库.在我的构造函数中,我传递了我的AngularFire af实例,但我无法在回调事件中访问它.有没有其他方法可以访问我的AngularFire实例?

// app/auth.service.ts

import { Injectable } from '@angular/core';
import { tokenNotExpired } from 'angular2-jwt';
import { AngularFire, AuthMethods, AuthProviders } from 'angularfire2';


// Avoid name not found warnings
declare var Auth0Lock: any;
declare var Auth0: any;

@Injectable()
export class Auth {
 // Configure Auth0
  lock = new Auth0Lock('AUTH0_CLIENT_ID', 'AUTH0_DOMAIN', {});


  constructor(private af: AngularFire) {
    // Add callback for lock `authenticated` event

    this.lock.on("authenticated", (authResult) => {
      this.lock.getProfile(authResult.idToken, function(error:any, profile:any){
        if(error){
          throw new Error(error);
        }

        localStorage.setItem('id_token', authResult.idToken);
        localStorage.setItem('profile', JSON.stringify(profile));

        var …
Run Code Online (Sandbox Code Playgroud)

firebase auth0 angularfire2 angular

0
推荐指数
1
解决办法
200
查看次数

Auth0管理员/用户范围

我目前正在编写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);
}
Run Code Online (Sandbox Code Playgroud)

在我的app_metadata对象中,我给了我的管理员用户,admin的角色.此规则有效,现在登录时,开发工具中显示的范围是"write:messages".

但是,现在已删除了初始范围,例如"openid read:messages"等

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

这是范围/索赔的正确过程吗?

javascript authentication scope auth0

0
推荐指数
1
解决办法
1866
查看次数

如何使用auth0-js传递其他信息(登录后重定向用户)

我想将用户重定向到登录工作流程之前他所在的当前页面。

  1. 用户想要转到/ profile
  2. 页面受保护;用户被重定向到/ login
  3. 使用重定向到/ callback的auth0-js登录工作流程
  4. 我希望回调页面将用户重定向到/ profile页面

是否有可能将其他信息传递给auth0-js(例如{from: '/profile'})?

这是我在React应用程序中对Auth0-js的初始化:

auth0 = new auth0.WebAuth({
        domain: 'xxx.auth0.com',
        clientID: 'xxx',
        redirectUri: 'http://localhost:3000/callback',
        audience: 'https://xxx.auth0.com/userinfo',
        responseType: 'token id_token',
        scope: 'openid profile offline_access'
    });
Run Code Online (Sandbox Code Playgroud)

要记录用户:

auth0.authorize();
Run Code Online (Sandbox Code Playgroud)

如果不将信息存储在localStorage中,我找不到方法。

javascript reactjs auth0

0
推荐指数
1
解决办法
546
查看次数