我想今天使用的常用术语是let mdata = Data(base64Encoded: "U2FsdGVkX19zC/z0w6myZ74GbapfAywMvb3Al2aD4v8=")!
let count = [UInt8](mdata).count
let mbytes = Array([UInt8](mdata)[AES.blockSize ..< count])
let mkey = "secret".md5().bytes
let miv = Array([UInt8](mdata)[0 ..< AES.blockSize])
let aes = try AES(key: mkey, blockMode: BlockMode.CBC(iv: miv))
let decrypted = try aes.decrypt(mbytes)
let mresult = String(bytes: decrypted, encoding: .utf8)
print(mresult)
。
请允许我解释一下我的情况。如果我使用错误的术语或者我的解释不清楚,请原谅我,因为我不是一个特别优秀的开发人员或建筑师。
我有站点A(例如www.siteA.com)和站点B(例如www.siteB.com)
站点A是Java项目,而站点B是Angular JS + Node JS项目(MyEAN Stack)。
将在站点A上提供链接以转到站点B.但是,只有在成功登录站点A后才能在站点B上查看页面。
流程将是。
- 登录网站A
- 点击链接到Site B
- 网站B加载
醇>
如果用户试图访问www.siteB.com,则不允许他们访问。您必须通过站点A.因此请求必须最低限度来自站点A. SiteB目前没有登录页面。
注意: - "Single Sign On"
我想知道我应该从哪里开始寻找如何实现这一点。任何形式的想法都会很棒,因为我一直在阅读和阅读,但还没有找到一个好的起点。也许我在错误的地方读书。
答案 0 :(得分:2)
使用JWT(Java Web令牌) 在SiteA上登录后。将向用户提供一个令牌,当用户被重定向到siteB时,该令牌将传递给SiteB。通常,令牌在Headers中传递。
<强>过程强>:
用户登录SiteA后。为用户提供令牌(JWT)。当用户单击指向SiteB的链接时,用户将被重定向到www.siteA.com/redirect
之类的内容。 java Web服务器获取此请求,作为响应,它在Header和状态码301中发送带有Token的新链接。
注意: - 由于我不是Java Developer,而且我不知道您使用的Java Server的类型,我提供的是express的示例。我希望你从那里得到这个想法。
router.get('/redirect', function(req, res) {
var token = 'jsdh98yuhes87e6ywqy2'; // Something Your server have generated
res.header('Authorization', token);
res.redirect(301,'http://www.SiteB.com/autologin/');
});
现在用户在NodeJS Server上。您现在要做的就是验证令牌以验证用户是否从Java网站(SiteA)重定向。
NodeJS服务器获取该请求并检查标头。
app.get('/autologin', function(request, response) {
let token = request.headers['Authorization'];
var isValid = false;
// Your check logic here
if(isValid){// If Valid redirect to SiteB
response.cookie('id_token' ,request.headers['x-auth-token'], { maxAge: 9000,expires: 600});
response.redirect(301,'http://www.siteB.com');
}else{//If not Valid redirect back to SiteA
return response.redirect(301, "http://www.siteA.com");
}
});
如果令牌有效,则用户可以访问网站www.SiteB.com
,否则用户将被重定向回www.SiteA.com
。
设置可能有点麻烦。有一种更简单的方法。
<强>替代强>:
Java Server端登录逻辑是相同的,除了现在将令牌添加为查询参数。
类似的东西:
www.SiteB.com/autologin?Token=ldkasjodauh21i7ds8yuh
您可以直接在重定向链接上将其添加为href
。
设置AngularJS应用程序以从URL获取令牌,并对您的nodejs服务器或Java Server进行API调用以验证令牌。
var token = $location.search().token;
var isValid = false;
// You check logic here
if(isValid){// If Valid redirect to SiteB
$location.url('http://www.siteB.com'); //$location.path('/') can be used as well
}else{//If not Valid redirect back to SiteA
$window.location.href ='http://www.siteA.com';
}
Java Server示例
package app.servlet;
import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ResponseRedirectionServlet extends HttpServlet
{
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException
{
String url = 'http://www.siteB.com';
response.setHeader("token", "kjsydis9d979as8dh87"); //some value that your server is generating
response.sendRedirect(url);
}
}
我仍然不知道您在SiteA上使用的服务器类型。如果您可以提供有关您在siteA上使用的服务器类型的更多信息,我将能够更准确地为您提供帮助。
答案 1 :(得分:1)
您可以使用JWT创建授权令牌。它应该从站点A重定向发送。之后你应该在站点B上创建会话。
答案 2 :(得分:0)
单点登录是一种可能性,您可以使用识别服务器与两个截然不同的站点进行通信。有几种可能性,通常的可能性是SAML技术。其他包括CAS和OAuth。
请在Google或/和Stackoverflow上搜索条款。由于您在这两个网站上有直接控制,因此如果有更简单的事情,您没有来使用SSO。 @ newman的回答可能有用。
如果要与外部应用程序集成,SSO可能会更好,这可能对您有用,也可能不重要。在继续之前请考虑一下你的问题。