Gio*_*usa 7 azure-active-directory firebase-authentication microsoft-graph
我正在构建一个使用Microsoft Graph登录的企业应用程序.成功签名后,我想使用令牌发送给Firebase Auth进行身份验证(这样我就可以保护对数据库的访问).
成功登录后收到的令牌无法直接用于Firebase.
获取项目的服务器密钥:
- 转到项目设置中的"服务帐户"页面.
- 单击"服务帐户"页面的Firebase Admin SDK部分底部的"生成新私钥".
- 新服务帐户的公钥/私钥对会自动保存在您的计算机上.将此文件复制到您的身份验证服务器
第三点说你需要输入密钥到认证服务器.这可能使用Microsoft Graph或Azure AD吗?
Firebase为您提供的密钥是JSON
文件.我已经检查了Microsoft App注册门户,它允许您编辑应用程序Manifest,但没有运气.
该JSON
文件如下所示:
{
"type": "service_account",
"project_id": "APP_ID",
"private_key_id": "KEY_ID_VALUE",
"private_key": "-----BEGIN PRIVATE KEY----<KEY VALUE>-----END PRIVATE KEY-----\n",
"client_email": "firebase-adminsdk-0ubvc@********.iam.gserviceaccount.com",
"client_id": "XXXXXXXXXXXX",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-0ubvc%XXXXXXXX.iam.gserviceaccount.com"
}
Run Code Online (Sandbox Code Playgroud)
我似乎无法找到任何涵盖此问题的github项目或stackoverflow线程.
如何使用MS Graph或Azure AD接收自定义令牌?
我现在已经完全解决了这个问题.通过对Stackoverflow的广泛研究和大量帮助,我设法解决了这个问题.
数据库机密目前已弃用,并使用旧版Firebase令牌生成器.现在Firebase Admin
进口已经足够了.
1.你不要需要铸币一个火力地堡令牌时,您的私有密钥发送给您的火力功能.在Firebase控制台中,您可以解压缩密钥并将文件重命名为service-account.json
.在执行之前,应该将它放在您的Functions文件夹中Firebase deploy
在您的index.js
文件中,您可以输入以下代码来获取服务文件:
const admin = require('firebase-admin');
Run Code Online (Sandbox Code Playgroud)编写接受来自其他身份验证服务的信息的功能:
// Create a Firebase token from any UID
exports.createFirebaseToken = functions.https.onRequest((req, res) => {
// The UID and other things we'll assign to the user.
const uid = req.body.uid;
const additionalClaims = {
name: req.body.name,
email: req.body.email
};
// Create or update the user account.
const userCreationTask = admin.auth().updateUser(uid, additionalClaims).catch(error => {
if (req.method === 'PUT') {
res.status(403).send('Forbidden!');
}
if (req.method === 'GET') {
res.status(403).send('Please use POST for this function');
}
// If user does not exists we create it.
if (error.code === 'auth/user-not-found') {
console.log(`Created user with UID:${uid}, Name: ${additionalClaims.name} and e-mail: ${additionalClaims.email}`);
return admin.auth().createUser({
uid: uid,
displayName: additionalClaims.name,
email: additionalClaims.email,
});
}
throw error;
console.log('Error!');
});
return Promise.all([userCreationTask]).then(() => {
console.log('Function create token triggered');
// Create a Firebase custom auth token.
admin.auth().createCustomToken(uid, additionalClaims).then((token) => {
console.log('Created Custom token for UID "', uid, '" Token:', token);
res.status(200).send(token);
return token
});
});
});
Run Code Online (Sandbox Code Playgroud)回复是非常重要的,res.status
因为这将完成任务.单个return
声明不会这样做.可以在github上找到Firebase自己的完整工作样本
现在,您可以做一个HTTP请求,可能看起来像这样使用Alamofire和swift
Alamofire.request("https://us-central1-<YOUR DATABASE REFERENCE>.cloudfunctions.net/createFirebaseToken",
method: .post, parameters: parameters, encoding: JSONEncoding.default).
responseString(completionHandler: { (token) in
// Handle the result here
})
Run Code Online (Sandbox Code Playgroud)
在这种情况下,该Parameters
常规JSON
文件包含您要添加到用户Firebase帐户的内容.
重要信息任何拥有云功能URL的人都可以触发此令牌铸造.因此,请确保添加安全措施来处理此问题.在Firebase制作的youtube上的Firecast视频中简要提到了这一点,并在Stackoverflow中的这个主题中进行了讨论
您现在已经过Firebase和Microsoft的身份验证
通过检查ID
我从Microsoft获得的内容,我还添加了一个额外的安全层,ID
与Firebase中经过身份验证的帐户中存储的内容相同.
归档时间: |
|
查看次数: |
3910 次 |
最近记录: |