允许从站点A访问站点B.

时间:2018-04-03 05:42:01

标签: java angularjs node.js redirect single-sign-on

我想今天使用的常用术语是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上查看页面。

流程将是。

  
      
  1. 登录网站A
  2.   
  3. 点击链接到Site B
  4.   
  5. 网站B加载
  6.   

如果用户试图访问www.siteB.com,则不允许他们访问。您必须通过站点A.因此请求必须最低限度来自站点A. SiteB目前没有登录页面。

注意: - "Single Sign On"

我想知道我应该从哪里开始寻找如何实现这一点。任何形式的想法都会很棒,因为我一直在阅读和阅读,但还没有找到一个好的起点。也许我在错误的地方读书。

3 个答案:

答案 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可能会更好,这可能对您有用,也可能不重要。在继续之前请考虑一下你的问题。