gpt4 book ai didi

ios - 与 parse-server 和 auth0 的自定义身份验证集成

转载 作者:可可西里 更新时间:2023-11-01 03:34:08 27 4
gpt4 key购买 nike

我想将 auth0.com 与开源解析服务器结合使用。

我目前的方法是通过 iOS 的 Lock 库使用他们的标准登录从 auth0 获取 token 。使用该 token ,我想在我的解析服务器上调用自定义身份验证方法,检查 token 是否有效,如果有效,将登录用户。

我的问题是几乎没有关于为解析服务器编写自定义 oauth 的文档。

到目前为止,我已经有了自定义身份验证的代码。

var Parse = require('parse/node').Parse;

function validateAuthData(authData, options) {
console.log('validateAuthData()');
return new Promise((resolve, reject) => {
try {
var decoded = jwt.verify(authData.access_token, opions.sharedSecret);
if (authData.id === decoded.sub) {
resolve({});
}
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Unauthorized');
} catch(e) {
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, e.message);
}
});
}

function validateAppId(appIds, authData) {
console.log('validateAppId()');
return Promise.resolve();
}

module.exports = {
validateAppId: validateAppId,
validateAuthData: validateAuthData
};

但是,它不起作用,而且我不明白如何使用此代码对特定用户进行身份验证。解析服务器是否进行数据库查找以将特定的身份验证数据与特定用户匹配?另外,如何使用自定义身份验证注册新用户。当用户尝试登录但我的解析数据库中不存在他时会发生什么?

替代方案似乎是 this ,使用 auth0.com 规则。有什么区别以及该规则将如何运作?我对身份验证、oauth 和 jwt 的经验很少。

最后,我正在使用 this从我的 iOS 客户端调用我的自定义身份验证。然而,这也不起作用,但我不确定这是由于 iOS 部分还是因为我的自定义身份验证尚未起作用。

总而言之,我在处理看似相当简单的事情时遇到了麻烦。我想使用 auth0 作为我的身份验证提供程序,我想将它集成为解析服务器,因为我真的很欣赏解析和客户端 sdk 的便利性。我相当肯定会有更多人遇到类似的问题,但是我还没有找到关于如何正确执行此操作的任何权威资源。

更多链接

最佳答案

迟到的答案,但我在解决同样的问题时遇到了这篇文章:

Auth0 具有您可以在登录发生时应用的规则。我从 https://github.com/auth0/rules/blob/master/src/rules/parse.js 修改了他们的示例一,将 API 端点提取到常量中。

function(user, context, callback) {
// run this only for the Parse application
// if (context.clientID !== 'PARSE CLIENT ID IN AUTH0') return callback(null, user, context);

const request = require('request');

const MY_API = 'https://subdomian.back4app.io';
const PARSE_APP_ID = '*********';
const PARSE_API_KEY = '**********';
const PARSE_USER_PASSWORD = 'REPLACE_WITH_RANDOM_STRING'; // you can use this to generate one http://www.random.org/strings/

const username = user.email || user.name || user.user_id; // this is the Auth0 user prop that will be mapped to the username in the db

request.get({
url: `${MY_API}/login`,
qs: {
username: username,
password: PARSE_USER_PASSWORD
},
headers: {
'X-Parse-Application-Id': PARSE_APP_ID,
'X-Parse-REST-API-Key': PARSE_API_KEY
}
},
function(err, response, body) {
if (err) return callback(err);

// user was found, add sessionToken to user profile
if (response.statusCode === 200) {
context.idToken[`${MY_API}/parse_session_token`] = JSON.parse(body).sessionToken;
return callback(null, user, context);
}

// Not found. Likely the user doesn't exist, we provision one
if (response.statusCode === 404) {
request.post({
url: `${MY_API}/users`,
json: {
username: username,
password: PARSE_USER_PASSWORD
},
headers: {
'X-Parse-Application-Id': PARSE_APP_ID,
'X-Parse-REST-API-Key': PARSE_API_KEY,
'Content-Type': 'application/json'
}
},
function(err, response, body) {
if (err) return callback(new Error('user already exists'));

// user created, add sessionToken to user profile
if (response.statusCode === 201) {
context.idToken[`${MY_API}/parse_session_token`] = body.sessionToken;
return callback(null, user, context);
}
return callback(new Error(username + ' The user provisioning returned an unknown error. Body: ' + JSON.stringify(body)));
});
} else {
return callback(new Error('The login returned an unknown error. Status: ' + response.statusCode + ' Body: ' + body));
}
});
}

我正在用 JS 编写一个 SPA,所以我有一些处理 Auth0 登录的客户端代码,(将“https://subdomian.back4app.io”替换为您自己的解析服务器的 API 地址 - 与上述 Auth0 规则中使用的值相同).注意 Parse.User.become 函数,它将 Auth0 规则中创建的 session ID 分配给当前解析用户:

handleAuthentication() {
this.auth0.parseHash((err, authResult) => {
if (authResult && authResult.accessToken && authResult.idToken) {
this.setSession(authResult);
Parse.User.become(authResult.idTokenPayload['https://subdomian.back4app.io/parse_session_token']);
history.replace('/');
} else if (err) {
history.replace('/home');
console.log(err);
}
});
}

关于ios - 与 parse-server 和 auth0 的自定义身份验证集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38069817/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com