我正在使用Auth0,它给了我一个JWT(json web令牌)和一个refreshtoken.我在http标头中使用此JWT与我的后端进行通信.
403
当它确定JWT已经过期时,它可能会发生,服务器给我一个.在这种情况下,我可以让Auth0使用refreshtoken向我发出一个新的JWT.这意味着我调用Auth0后端,将它传递给refreshtoken,它给了我一个新的JWT,然后我可以在我的请求中使用它.
我的问题是,如何在我的所有网络代码中有效地编写此行为?我将有几个端点可以交谈,他们都可以返回403.
我想我应该首先制作一个拦截器,将JWT添加到所有请求中.
然后应该有检测403的行为,静静地对Auth0进行网络调用,检索新的JWT.然后应该再次尝试原始请求,并在其标题中添加新的JWT.
所以我更希望将403处理到我的其他代码看不到的地方,并且绝对不必在任何地方重写它.
任何关于如何实现这一点的指示将不胜感激.
-
要清楚,我基本上是在寻找如何使用RxAndroid Observables实现这一目标的指针.当某个Observable找到403时,它应该"注入"一个新的网络呼叫.
我目前正在尝试在我的NodeJS + React App中实现Auth0.虽然我有一个很大的问题,但本教程非常有用且有用.每当我尝试通过Auth0登录/注册时,我都会得到
XMLHttpRequest无法加载 https://XYZ.eu.auth0.com/usernamepassword/login.对预检请求的响应未通过访问控制检查:请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许来源' http:// localhost:3000 '访问.对预检请求的响应未通过访问控制检查:请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许来源' http:// localhost:3000 '访问.
所以我粗略地理解这意味着什么.但我只是不知道在哪里设置所需的选项以允许此请求到Auth0.在服务器端?在浏览器代码中?
最好的祝福
编辑:正如RodrigoLópezDato指出的那样,我可以在我的应用程序中编写Origins:https://manage.auth0.com/#/applications
我在本地开发时应该把它放在那里?我的IP?
我正在使用Lock在我的Android App中为用户提供登录功能.
这是我的代码:私人锁定锁;
private LocalBroadcastManager broadcastManager;
private BroadcastReceiver authenticationReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String idToken = intent.getStringExtra("com.auth0.android.lock.extra.IdToken");
String tokenType = intent.getStringExtra("com.auth0.android.lock.extra.TokenType");
Log.i(TAG, "User logged in with " + idToken + " "+ tokenType);
}
};
//Not sure use of this callback though its not being called anytime.
private LockCallback callback = new AuthenticationCallback() {
@Override
public void onAuthentication(Credentials credentials) {
Log.d(TAG, "Authenticated");
}
@Override
public void onCanceled() {
Log.d(TAG, "Authentication cancelled");
} …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Graphcool,Apollo和React应用程序设置Auth0的通用登录.我的网站是一个静态托管Netlify的SPA.
我正在使用Graphcool的官方Auth0模板:https://github.com/graphcool/templates/tree/master/auth/auth0
但是,我在官方文档中找不到太多细节,所以我遵循本教程:https://medium.com/@quiaro/authentication-inside-a-graphcool-service-using-auth0-5056806d02f0
我有一个由登录组件调用的auth组件:
import React from 'react';
import auth0 from 'auth0-js';
export default class Auth {
auth0 = new auth0.WebAuth({
domain: 'MY-SITE.auth0.com',
clientID: 'MY-CLIENT-ID',
redirectUri: 'http://localhost:3000/callback',
audience: 'https://MY-SITE.auth0.com/userinfo',
responseType: 'id_token',
scope: 'openid email',
});
login() {
this.auth0.authorize();
}
}
import Auth from './Auth';
class Login extends React.Component {
render() {
const auth = new Auth();
auth.login();
return (
// Login message
);
}
}
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,这将我带到Auth0的页面,我可以登录,之后我被重定向回我的网站,并将参数添加到网址:
http://localhost:3000/callback#id_token=LONG-ID-TOKEN&state=STRING
Run Code Online (Sandbox Code Playgroud)
如果我将LONG-ID-TOKEN粘贴到https://jwt.io/中,则信息似乎是正确的,并且表示签名有效:
标题:
{
"typ": "JWT", …
Run Code Online (Sandbox Code Playgroud) 如何在 Auth0 中禁用用户配置文件缓存?
我已经能够更新用户配置文件 user_metadata。但问题是,Auth0 缓存了用户配置文件,因此只有在用户注销然后重新登录后才会看到此更新。这是一个问题,因为我不想总是强迫用户每次打开我的应用程序时都登录。我希望应用程序会记住会话,但在应用程序打开时仍会查询用户信息数据。缓存使这成为不可能。
显然,这是由于“用户配置文件:深入详细信息”中记录的 auth0 缓存所致。
但是,同一份文件指出“您可以通过 Auth0 仪表板或管理 API 删除用户的缓存配置文件。” 我希望在更新 user_metadata 时删除 userinfo 缓存(最好是针对特定用户),但我一直无法在 Management API 中找到有关如何删除 userinfo 缓存的任何信息。
Auth0团队创建了一个名为"angular-jwt"的东西,它有一个jwtHelper类.这个东西成功地解码了一个本地JWT而没有我在服务器上使用的秘密.这怎么发生的?如果它们不安全,那么使用秘密签名/加密它们有什么意义呢?
加密令牌的服务器上的函数(使用"jsonwebtoken"):
function createToken (user) {
return jwt.sign(_.omit(user, 'password'), config.secret, { expiresInMinutes: 60*5 });
}
Run Code Online (Sandbox Code Playgroud)
来自客户的代码:
angular
.module('sample.home', [
'ui.router',
'angular-storage',
'angular-jwt'
])
.config(function ($stateProvider) {
$stateProvider
.state('home', {
url: '/',
controller: 'HomeCtrl',
templateUrl: 'modules/home/home.html',
data: { requiresLogin: true }
})
})
.controller('HomeCtrl', function homeController ($scope, $http, store, jwtHelper) {
$scope.jwt = store.get('jwt');
$scope.decodedJwt = $scope.jwt && jwtHelper.decodeToken($scope.jwt);
});
Run Code Online (Sandbox Code Playgroud)
这是完整示例的链接: http://github.com/auth0/ang ...
我需要我的API来返回包含一些用户信息的对象.例如:
api/comment/123
需要返回:
{
id: 123,
author: {
id: 'googleblahblah|123456789',
name: 'James Bond'
}
}
Run Code Online (Sandbox Code Playgroud)
通常我会加入用户和评论表,虽然在这种情况下我不能.我的应用程序的数据库存储用户ID,但名称(和其他用户的东西)存储在Auth0中.
显然,在每次API调用中对Auth0进行API调用以"丰富"对象是不可信的.
我是否在我的应用服务器上缓存所有/一些用户信息?在API结果中只有用户ID并让客户端丰富数据?
人们如何处理这个问题?
背景
我正在我的 React 应用程序中测试隐式流身份验证,并尝试实现所谓的 静默刷新功能,在用户登录时,我定期要求一个新的访问令牌,而无需要求他提供新的授权。
以下是 Flow 模式Auth0 Tenant
,在我的例子中,是 Spotify:
虽然使用隐式授权的 SPA(单页应用程序)不能使用刷新令牌,但还有其他方法可以提供类似的功能:
prompt=none
调用/authorize
端点时使用。用户不会看到登录或同意对话框。
/authorize
从隐藏的 iframe调用并从父框架中提取新的访问令牌。用户不会看到重定向发生。
另一种方法是实现类似包axios-auth-refresh 的东西,一个库
帮助您通过
axios
拦截器实现授权的自动刷新。当原始请求失败时,您可以轻松拦截原始请求,刷新授权并继续原始请求,无需任何用户交互。
用法:
import axios from 'axios';
import createAuthRefreshInterceptor from 'axios-auth-refresh';
// Function that will be called to refresh authorization
const refreshAuthLogic = failedRequest => axios.post('https://www.example.com/auth/token/refresh').then(tokenRefreshResponse => {
localStorage.setItem('token', tokenRefreshResponse.data.token);
failedRequest.response.config.headers['Authorization'] = 'Bearer ' + tokenRefreshResponse.data.token;
return Promise.resolve();
});
// Instantiate the interceptor (you can chain it as …
Run Code Online (Sandbox Code Playgroud) 自从我将物理设备连接到我的计算机来测试我的 React Native 项目后,我就开始遇到这个问题。在物理设备出现之前,相同的代码无需任何更改即可在我的计算机上正常运行,并且我能够在 Android 模拟器上安装并测试它。
现在,我不断收到以下错误,并且应用程序无法构建。错误是:
配置项目“:react-native-auth0”时出现问题。
未找到名称为“compile”的配置。
错误指向\node_modules\react-native-auth0\android\build.gradle
包含以下代码的文件:
task androidJavadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += files(android.bootClasspath)
classpath += files(project.getConfigurations().getByName('compile').asList()) // <-- The error is pointing to this line
include '**/*.java'
}
Run Code Online (Sandbox Code Playgroud)
正如我所说,使用 Android 模拟器在我的笔记本电脑上一切正常。自从连接和配置物理设备后,我什至无法再构建项目。
知道问题是什么以及如何解决它吗?
在使用 fastapi 的 okta 应用程序设置 Auth0 身份验证时,我们收到以下错误,
jwt.exceptions.PyJWKSetError: The JWK Set did not contain any usable keys
Run Code Online (Sandbox Code Playgroud)
我们遵循以下链接中详细说明的指南来使用 auth0 实施快速 api 授权。
https://auth0.com/blog/build-and-secure-fastapi-server-with-auth0/
以下代码用于验证创建的令牌。给定的错误出现在验证函数的第一个 try 块中。
class VerifyToken():
"""Does all the token verification using PyJWT"""
def __init__(self, token):
self.token = token
self.config = set_up()
print(self.config)
# This gets the JWKS from a given URL and does processing so you can
# use any of the keys available
jwks_url = f'https://{self.config["DOMAIN"]}/.well-known/jwks.json'
self.jwks_client = jwt.PyJWKClient(jwks_url)
def verify(self):
# This gets the 'kid' …
Run Code Online (Sandbox Code Playgroud)