如何解决使用Lamda @ Edge的私人客户端MSAL身份验证
我有一个通过CloudFront托管的静态站点,并且正在通过我的组织Microsoft用户的登录页面保护它的安全。我已经在Microsoft注册了一个应用程序,因此我在该处拥有必要的凭据,我主要遵循此文档来构建Lambda @ Edge https://github.com/nzoschke/gofaas/blob/master/web/handlers/auth/index.js上的结构(尽管它使用Passport / Google而不是msal-node)
我想要的行为是用户转到sub.domain.com,如果他们已经登录到其AAD帐户,那么理想情况下,他们只是可以访问,否则,应该将他们重定向到从列表/登录中选择一个帐户上,然后最终使用令牌/ cookie重定向到sub.domain.com以对其进行授权。
这是我的lambda处理程序:
exports.handler = (event,context,callback) => {
console.log(JSON.stringify(event))
var request = event.Records[0].cf.request;
var host = request.headers.host[0].value;
// explicitly call middleware
if (request.uri === "/auth")
return auth(request,callback);
// explicitly expire token
if (request.uri === "/auth/expire")
return callback(null,responseCookie("",new Date(0),`https://${host}/auth`));
// if token is valid make original request
// if invalid call middleware
try {
var key = new Buffer(Params.AuthHashKey,"base64");
jwt.decode(requestCookie(request,"access_token"),key);
callback(null,request);
}
catch (err) {
auth(request,callback);
}
};
这是auth函数:
var auth = (request,callback) => {
var host = request.headers.host[0].value;
const authCodeUrlParameters = {
scopes: ["user.read"],redirectUri: "https://ramp.graphable.ai/",};
// get url to sign user in and consent to scopes needed for applicatio
pca.getAuthCodeUrl(authCodeUrlParameters).then((response) => {
console.log(response)
var exp = new Date(new Date().getTime() + 864000000); // 1 day from now
var key = new Buffer(AuthHashKey,"base64");
var token = jwt.encode({
exp: Math.floor(exp / 1000),sub: profile.emails[0].value,},key);
callback(null,responseCookie(token,exp,`https://${host}/`));
}).catch((error) => console.log(JSON.stringify(error)));
};
我的猜测是,我没有适当地完成该流程的某些部分,https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/samples/msal-node-samples/auth-code/index.js,但我不认为这甚至是完成我想要的工作的适当流程。
我在做什么错了?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。