我没有特定的技术问题,但在理解使用 Auth0 进行身份验证然后使用返回的配置文件访问 rails API 的体系结构时遇到了一般问题。
我在 React Native 中使用 Auth0.Lock 并且可以成功注册并登录到我的 React Native 应用程序并存储返回的配置文件和令牌。
在 Rails 方面,我根据实现 JWT 身份验证的说明创建了一个 API 并设置了 Knock ( https://github.com/nsarno/knock )。
我不明白的是我在 Rails 中的用户模型和我在 Auth0 中的数据库之间的链接。Auth0 文档或 Knock 文档都不清楚这种关联是如何发生的。
谢谢克雷格
我正在使用auth0-java客户端库与auth0 v2服务交互,我的代码在我的开发环境中编译并运行良好,但是当我在另一个测试环境中部署该构建时,它会引发以下异常:
java.lang.NoSuchMethodError:com.fasterxml.jackson.databind.ObjectMapper.readerFor(Lcom/fasterxml/jackson/databind/JavaType;)Lcom/fasterxml/jackson/databind/ObjectReader;
at com.auth0.json.mgmt.users.UsersPageDeserializer.getArrayElements(UsersPageDeserializer.java:52)
at com.auth0.json.mgmt.users.UsersPageDeserializer.deserialize(UsersPageDeserializer.java:30)
at com.auth0.json.mgmt.users.UsersPageDeserializer.deserialize(UsersPageDeserializer.java:15)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3562)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2597)
at com.auth0.net.CustomRequest.parseResponse(CustomRequest.java:63)
at com.auth0.net.BaseRequest.execute(BaseRequest.java:37)
at com.myapp.security.Auth0Service.getUserByEmail(Auth0Service.java:246)
at com.myapp.security.Auth0Service.checkForExsistingAuth0Account(Auth0Service.java:266)
at com.myapp.security.AdminUILayout.lambda$launchProgressUpdater$0(AdminUILayout.java:293)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)
我已经通过几个stackover流的问题,如走这 并试图清理.m2/repository/com/fasterxml该测试环境的文件夹,但cloudn't这里解决了没有这样的方法错误是我的POM文件及以下相关代码给出:
代码
public User getUserByEmail(String email){
UserFilter filter = new UserFilter();
filter.withQuery(email);
Request<UsersPage> request = mgmt.users().list(filter);
try {
UsersPage response = request.execute();
for (User u:response.getItems()) {
if (u.getEmail().equals(email)) {
return u;
}
}
} catch (APIException exception) {
// api error
System.out.println("APIException:::::"+exception.getDescription());
} catch (Auth0Exception exception) { …Run Code Online (Sandbox Code Playgroud) 我正在开发一个使用 OpenId 连接隐式流与 Auth0 提供程序的应用程序。我已经能够从 Auth0 获取 JWT 令牌,现在想在 Couchbase 同步网关中启动一个会话。
为此,我做了一个 POST /{db}/_session,返回一个带有SyncGatewaySessionid的 cookie 。据我了解,这应该与同步网关 Web 界面中的用户相关联......但是我没有看到创建用户。
那么,有没有办法查看我使用哪个用户进行复制?
或者确保同步网关正确读取我的 JWT 令牌的方法?
编辑当我通过在我的配置文件中设置以下内容来禁用 GUEST 用户时,
"users": {
"GUEST": {
"disabled": true,
"admin_channels": [
"*"
]
}
}
Run Code Online (Sandbox Code Playgroud)
我的 OpenId 似乎无法访问同步。我想这意味着我在不知不觉中使用了 GUEST 用户。
所以。如何将我的 OpenID 用户创建为与 GUEST 用户不同的用户?
我正在使用 Auth0 的托管屏幕。我希望以下场景起作用-
但我面对的是这个画面——
我怎样才能保存我的用户这个额外的点击?如何实现静默身份验证?我知道你要传递prompt=none到/authorizeAPI,但是因为我没有手动调用API,如何让我的锁通话/authorize用prompt=none?
auth0.js有一个函数,用于解析 URL 哈希片段并从中提取认证结果。我将此函数包装在一个名为loadSession如下的函数中:
public loadSession(): void {
this.auth0.parseHash((err, authResult) => {
if (authResult) {
window.location.hash = '';
localStorage.setItem('token', authResult.accessToken);
// TODO (1)
} else if (err) {
// TODO (2)
}
});
}Run Code Online (Sandbox Code Playgroud)
如上所示,parseHash将回调函数作为参数,我无法控制它。我想loadSession返回一个在上面Promise解决// TODO (1)和拒绝的问题// TODO (2)。这样我可以做到obj.loadSession().then(() => { // do something if successful }).catch((err) => { // raise error if not })
我已经被困在这个问题上好几个星期了,我想不通。它让我发疯......我读过很多教程,听起来它应该起作用!
我有一个 expressjs 服务器设置和一个 vuejs 应用程序。我希望能够使用历史浏览器模式为 vuejs 路由提供服务,我还希望能够为我的 api 层设置服务器端路由。
如果我禁用历史模式,一切正常 - 但我需要启用历史模式,以便我可以使用 auth0 库和回调。回调不允许在 url 中使用 #。
这是我的代码:
const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const logger = require('morgan');
const history = require('connect-history-api-fallback');
const app = express();
app.use(require('connect-history-api-fallback')())
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(history({
verbose: true
}));
app.get('/api', (req, res) => res.send('Hello World!'))
app.use('/', express.static(path.join(__dirname, 'dist')));
var port = process.env.PORT || 8080;
app.listen(port);
console.log('server started '+ port);
Run Code Online (Sandbox Code Playgroud)
对于上面的代码,vuejs 应用程序位于 /dist 下,并且该应用程序的所有路由都有效。但是当我尝试点击 /api 时 - 它也被重定向到 vuejs 应用程序。 …
我目前正在开发一个反应原生的移动应用程序,并使用 Auth0 进行用户管理。我正在使用我自己的登录、注册和忘记密码屏幕,而不是他们的锁定小部件。我能够通过调用他们的身份验证 api 以及使用他们的管理 api 进行帐户链接来实现无密码短信和电子邮件。但是,一旦用户已经拥有帐户,我就很难通过 api 使用他们的电子邮件和密码对用户进行身份验证。在我看来,应该有一个单一的端点,您可以在其中将电子邮件和密码包含在请求正文中。我想知道是否有人可以帮助我了解如何使用 auth0 的 api 简单地登录用户。提前致谢。
在我们的网站上,管理员应该能够以用户(客户端)的身份查看网站。我计划为此使用Auth0,只是注意到他们的模拟功能已被弃用。
我可以在Redux中强制某些登录标志,以允许管理员以用户身份查看,但是,要从API获取用户的任何数据,我要从登录期间Auth0生成的访问令牌中获取用户ID。因此,API将仅从当前登录的用户访问令牌中获取数据。
有人知道有什么方法可以模拟用户吗?我认为通过解析访问令牌中的用户ID来获取该用户的任何数据,从而对我的API施加了限制,如果我错了,请更正我。
我能想到的唯一方法是,如果管理员“以用户身份查看”,则可以在API调用中传递用户的ID。在控制器中,我可以检查用户ID字段是否存在并使用它代替当前登录的用户,但是我认为传递用户ID并不是一个好主意。也许我可以在每个请求上添加一个中间件,并且如果该用户ID在API调用中存在,我可以检查该用户的角色以确保它是可以验证请求的管理员。
你怎么看?关于此方法还有其他想法/批评吗?
谢谢!!
目前,当我创建路由时,我会检查 Auth0 方法 - isAuthenticated() - 以确定是否返回受保护的页面或重定向到登录。但是,此状态仅存在于内存中,并且不会在浏览器刷新时将用户保留在其页面上,我希望这样做。
这是一个 React/RR4/React Context 应用程序,我的 Auth0 方法列在 Auth.js(如下)中。
将登录状态存储在 localStorage 中是非常不可取的。如果我将 Auth0 令牌存储在 cookie 中,我不确定如何验证令牌,因为没有设置服务器验证。检查将启用安全数据持久性的正确条件是什么?
ProtectedRoutes.jsx:
<Route
exact
key={route.path}
path={route.path}
render={() => (
// CONDITION TO CHECK
context.auth.isAuthenticated()
? (
<div>
<route.component />
</div>
) : <Redirect to="/login" />
)}
/>
Run Code Online (Sandbox Code Playgroud)
Auth.js(添加以供参考):
import auth0 from 'auth0-js';
import authConfig from './auth0-variables';
class Auth {
accessToken;
idToken;
expiresAt;
tokenRenewalTimeout;
auth0 = new auth0.WebAuth({
domain: authConfig.domain,
clientID: authConfig.clientId,
redirectUri: authConfig.callbackUrl,
responseType: 'token id_token',
scope: 'openid'
});
constructor() …Run Code Online (Sandbox Code Playgroud) 我在我的电子应用程序中使用 auth0 身份验证。无论如何,我都没有使用电子应用程序的浏览器窗口。所以,我想在外部浏览器(chrome、Firefox 等)或安装的默认浏览器中打开我的 auth0 身份验证窗口。有什么办法吗?
auth0 ×10
reactjs ×2
access-token ×1
api ×1
callback ×1
cookies ×1
electron ×1
express ×1
jackson ×1
java ×1
javascript ×1
json ×1
maven ×1
oauth ×1
oauth-2.0 ×1
promise ×1
react-native ×1
routing ×1
typescript ×1
vue.js ×1