标签: auth0

如何使用赛普拉斯在E2E测试中登录Auth0?

我已经开始测试一个反应webapp但我没有走远,因为我遇到了登录问题.我正在使用cypress e2e测试工具.

将显示一个欢迎页面,其中包含一个要登录的按钮,该按钮将重定向到您的auth0服务.用户使用电子邮件和密码登录,然后使用令牌重定向回webapp.

我尝试了许多不同的方法,导致了不同的问题.

注意:我不想测试Auth0,我只想输入我的webapp.

尝试1.单击登录按钮

尝试:赛普拉斯应该像用户一样做,因此测试将点击登录按钮并转到Auth0并填写凭据.问题:赛普拉斯不允许您在测试期间导航到其他域.

由于赛普拉斯更改了自己的主机URL以匹配您的应用程序的URL,因此它要求您的应用程序保留在同一个超级域中以进行单个测试.

您应该能够禁用该设置"chromeWebSecurity": false,cypress.json但它无法使用,因为您只能访问单个域cy.visit()

尝试2.从测试中以编程方式登录

尝试:使用auth0-js库登录cypress测试,因此不需要单击登录按钮,因此不会发生域更改.

describe('Waiting to fetch', () => {
  beforeEach(() => {
    this.fetchAuthDeferred = getDeferred()
    cy.visit('http://localhost:3000', {
      onBeforeLoad(win) {
        cy.stub(win, 'fetch')
          .withArgs($url)
          .as('fetchAuth')
          .returns(this.fetchAuthDeferred.promise)
      }
    })
  })

  it('login', () => {
    cy.visit('http://localhost:3000')

    const auth = new auth0.WebAuth(authOptions)
    auth.login(loginOptions)

    cy.get('@fetchAuth', { timeout: 10000 }).should('haveOwnProperty', 'token')

    cy.visit('http://localhost:3000')
    cy.get('[class*="hamburger"]').click()
  })
})
Run Code Online (Sandbox Code Playgroud)

问题:cy.route() 不等待获取请求,解决方法是使用cy.stub(win, 'fetch').它不会等待:

在此输入图像描述

尝试3.从webapp以编程方式登录

尝试:我开始认为柏树只是从应用程序发出的间谍请求,而不是来自测试本身(正如我在上面的观点中所尝试的那样).

我在欢迎页面中添加了一个假登录按钮,该按钮将 …

testing mocking e2e-testing auth0 cypress

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

Angular 导入的模块不等待 APP_INITIALIZER

auth0/auth0-angular我正在尝试在 Angular 11 应用程序中使用该库。

我正在关注动态加载配置部分。

它提供了此示例应用程序模块代码:

// app.module.ts
// ---------------------------
import { AuthModule, AuthClientConfig } from '@auth0/auth0-angular';

// Provide an initializer function that returns a Promise
function configInitializer(
  handler: HttpBackend,
  config: AuthClientConfig
) {
  return () =>
    new HttpClient(handler)
      .get('/config')
      .toPromise()
      .then((loadedConfig: any) => config.set(loadedConfig));   // Set the config that was loaded asynchronously here
}

// Provide APP_INITIALIZER with this function. Note that there is no config passed to AuthModule.forRoot
imports: [
  // other imports..

  HttpClientModule,
  AuthModule.forRoot(),   //<- …
Run Code Online (Sandbox Code Playgroud)

auth0 angular

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

Ionic2中的Auth0给出了Uncaught在回调中找不到中继帧

我试图让Auth0在浏览器中使用

离子运行浏览器

我遵循了Auth0的指南.我在用

auth0-7.6.1.min.js

锁定/ 10.10.2/lock.min.js

版本.导航到谷歌登录页面,但回调失败,空白屏幕.通过回电我的意思是加载

https://n00b.au.auth0.com/login/callback?state=blahblahblah ...

网址.它使用引发exeption的JavaScript加载白色html

没有找不到中继帧

在这些代码行中

     onOpen: function(cb) {
        var o = "*";
        var msgTarget = isIE ? findRelay() : window.opener;
        if (!msgTarget) throw "can't find relay frame";
Run Code Online (Sandbox Code Playgroud)

显然,一个全局的window.opener属性预计会存在.知道整个URL由Auth0提供,我无法找到解决问题的方法.

我已经检查过Auth0中的日志,从他们的角度来看它都是绿色的并显示成功登录.

任何想法为什么会失败?

更新:在iPhone和iOS模拟器上测试,两者都只显示空白屏幕.下载了示例Auth0项目,没有任何修改就有这个问题.我的猜测是它与Cordova的InApp Browser插件有关,在一个新的safari窗口中打开登录页面

auth0 ionic2 angular

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

Spring Boot 在 ServerOAuth2AuthorizedClientExchangeFilterFunction 中向 WebClient 请求添加附加属性

我正在尝试实现 client_credentials 授予以在我的 Spring Boot 资源服务器中获取令牌。我使用Auth0作为授权服务器。他们似乎需要在请求正文中添加一个名为“audience”的额外参数。

我尝试通过邮递员提出请求并且它有效。我现在正尝试在 Spring 内重现它。这是工作邮递员的请求

curl -X POST \
  https://XXX.auth0.com/oauth/token \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'grant_type=client_credentials&audience=https%3A%2F%2Fxxxxx.auth0.com%2Fapi%2Fv2%2F&client_id=SOME_CLIENT_ID&client_secret=SOME_CLIENT_SECRET'
Run Code Online (Sandbox Code Playgroud)

我面临的问题是我无法将缺少的受众参数添加到令牌请求中。

我在 application.yml 中定义了一个配置

client:
    provider:
      auth0:
        issuer-uri: https://XXXX.auth0.com//
    registration:
      auth0-client:
        provider: auth0
        client-id: Client
        client-secret: Secret
        authorization_grant_type: client_credentials
      auth0:
        client-id: Client
        client-secret: Secret
Run Code Online (Sandbox Code Playgroud)

我的网络客户端过滤器是这样配置的。

@Bean
WebClient webClient(ReactiveClientRegistrationRepository clientRegistrations,
                    ServerOAuth2AuthorizedClientRepository authorizedClients) {
    ServerOAuth2AuthorizedClientExchangeFilterFunction oauth2 = new ServerOAuth2AuthorizedClientExchangeFilterFunction(
            clientRegistrations, authorizedClients);
    oauth2.setDefaultClientRegistrationId("auth0");
    return WebClient.builder()
            .filter(oauth2)
            .build();
}
Run Code Online (Sandbox Code Playgroud)

我正在注入实例并尝试发出请求以通过电子邮件获取用户

 return this.webClient.get()
            .uri(this.usersUrl + "/api/v2/users-by-email?email={email}", email)
            .attributes(auth0ClientCredentials())
            .retrieve()
            .bodyToMono(User.class);
Run Code Online (Sandbox Code Playgroud)

按照我的理解,过滤器拦截此 userByEmail …

spring-boot spring-security-oauth2 auth0

14
推荐指数
2
解决办法
1万
查看次数

PKCE 增强授权代码流中保护 code_verifier 的最佳实践

由于 PKCE 现在是隐式流程上推荐的授权方法,因此我正在寻找处理代码验证器的最佳实践以及如何完成此操作的建议。在高层 PKCE 授权流程中包括:

  1. code_verifier在客户端生成
  2. 生成code_challenge自 (1)
  3. 点击/authorise哪个code_challenge重定向来选择 idp 并在回调中有一个code
  4. 使用code(3) 中的 以及 来code_verifier交换访问令牌

问题是,在步骤 3 中,在应用程序重定向到授权服务器然后 idp 之前,必须将其存储code_verifier在某处。那是在什么地方?

似乎像okta-oidc-js存储code_verifier在 sessionStorage 中的库。这不会让您遭受 XSS 攻击吗?即,如果我在应用程序进入授权流程并重定向之前将其存储code_verifier在 sessionStorage 中,那么在回调中,什么会阻止某些 rouge 扩展从codeURL 和code_verifiersessionStorage 读取?其组合可用于交换访问令牌。

authorization oauth-2.0 openid-connect auth0 pkce

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

如何使用auth0自定义api进行用户名密码请求,收到错误"不支持的授予类型:密码"错误

我尝试使用auth0邮递员模板使用用户名和密码进行身份验证请求,我得到了一个unsupported grant type: password error.我究竟做错了什么?

var client = new RestClient("https://test.auth0.com/oauth/token");
var request = new RestRequest(Method.POST);
request.AddHeader("postman-token", "abc");
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "application/x-www-form-urlencoded");
request.AddParameter("application/x-www-form-urlencoded", "grant_type=password&client_id=foo&audience=&username=test&password=test&scope=openid%20email%20picture%20nickname", ParameterType.RequestBody);
Run Code Online (Sandbox Code Playgroud)

auth0

13
推荐指数
2
解决办法
6703
查看次数

如何使用MQTT处理JWT撤销

按照本Auth0文章中的说明,我使用"JWT"作为用户名并使用JWT令牌作为密码成功验证了MQTT客户端.

然而,在我的用例中,JWT令牌是短暂的.客户端必须在当前令牌的到期日期之前获取新令牌,然后将其提供给MQTT服务器.否则,服务器终止连接.

我的问题是:如何实现令牌更新?它是来自客户的发布消息吗?哪个主题?我是否断开客户端连接,并让客户端使用新令牌重新进行身份验证?或者还有另一种方式吗?

oauth jwt mqtt json-web-token auth0

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

来自 react 组件之外的 auth0provider 的访问令牌

我正在使用用户在登录时提供的 auth0 令牌通过 useAuth0.getTokenSilently 进行 api 调用。

在此示例中fetchTodoListaddTodoItem、 和updateTodoItem都需要令牌进行授权。我希望能够将这些函数提取到一个单独的文件中(例如utils/api-client.js并导入它们而无需显式传入令牌。

import React, { useContext } from 'react'
import { Link, useParams } from 'react-router-dom'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { faCircle, faList } from '@fortawesome/free-solid-svg-icons'
import axios from 'axios'
import { queryCache, useMutation, useQuery } from 'react-query'
import { TodoItem } from '../models/TodoItem'
import { TodoInput } from './TodoInput'
import { TodoList as TodoListComponent } from './TodoList'
import { TodoListsContext } …
Run Code Online (Sandbox Code Playgroud)

typescript reactjs auth0 axios

13
推荐指数
2
解决办法
2457
查看次数

如何在使用Auth0 Lock时管理后端用户?

我正在使用React创建一个前端,并使用Node创建后端.我想使用Auth0 Lock管理用户信息- 向API发送带有每个请求的JWT.

如果我需要做以下事情之一怎么办?

  • 存储带有作者ID的博客文章

Auth0唯一标识符user_id不是整数,因此不能用作ID /密钥.我如何在服务器端用户存储上处理这个问题?

  • 有一个用户表来存储"个人资料"或其他类似信息

我是否在每个API请求上阅读JWT,确定该用户是否存在,然后创建新用户(如果不存在),或者将其与预先存在的用户相关联.在每个API请求上检查用户数据库是否有效?

我不确定如何使用基于JWT的API和Auth0处理一般流程.

编辑:

经过一番研究和反思后我的想法:Auth0的唯一用户标识符由他们提供user_id.这里的问题是它不是整数.因此,它不应该用作users数据库中表的键.

看起来好像你不应该在每个请求上检查用户数据库,但这可能是不正确的.一个想法是在初始登录时回调到后端,如果该帐户不存在,则创建它,如果该帐户存在,则继续.然后在用户登录前端后,在每个后续请求中信任Auth0 JWT(如果它在后端验证).

从我在网上看到的这个过程的极少描述来看,我所描述的方式似乎是正常的方式.但在某些情况下它没有意义.如果用户被禁止怎么办?他们仍然可以使用活动的JWT访问服务器功能,直到它由于时间过期而到期.

因此,如果在每个API请求上检查用户存储是正常/高效的,那么如何将Auth0的字符串id user_id与数据存储区中的整数ID相关联以进行查询?我正在使用SQL变体.

javascript node.js jwt reactjs auth0

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

Angular 6 Auth0 - 全局未定义

我已将我的应用程序从角度5升级到角度6.我现在收到以下错误.

Uncaught ReferenceError: global is not defined
at Object../node_modules/auth0-lock/lib/utils/cdn_utils.js (cdn_utils.js:13)
Run Code Online (Sandbox Code Playgroud)

"angular2-jwt":"^ 0.2.3","auth0-js":"^ 9.5.1","auth0-lock":"^ 11.6.1",

auth0 angular

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