gpt4 book ai didi

java - 允许从站点 A 访问站点 B

转载 作者:搜寻专家 更新时间:2023-11-01 00:36:33 26 4
gpt4 key购买 nike

我想今天使用的常用术语是“单点登录”

请允许我解释一下我的情况。如果我使用了错误的术语或者我的解释不清楚,请原谅我,因为我不是一个特别好的开发人员,也不是一个架构师。

I have Site A (eg. www.siteA.com) and Site B (eg. www.siteB.com)

站点 A 是一个 Java 项目,而站点 B 是一个 Angular JS + Node JS 项目 (MyEAN Stack)。

将在站点 A 上提供转到站点 B 的链接。但是,您只有在成功登录站点 A 后才能查看站点 B 上的页面。

流程将是。

  1. Log in on Site A
  2. Click on link to Site B
  3. Site B loads

如果用户尝试访问 www.siteB.com,他们将不会被允许访问。您必须通过站点 A。因此请求必须至少来自站点 A。 SiteB 目前没有登录页面。

注意:- 这两个站点是不同的域。

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

最佳答案

使用 JWT(Java 网络 token )在 SiteA 上登录后。当用户被重定向到 siteB 时,将向用户提供一个 token ,该 token 将传递到 SiteB。通常 token 在 header 中传递。

过程:

一旦用户登录到 SiteA。用户被提供了一个 token (JWT)。当用户单击指向 SiteB 的链接时,用户将被重定向到类似 www.siteA.com/redirect 的内容。 java web 服务器收到此请求并作为响应发送 header 中带有 token 和状态代码 301 的新链接。

注意:- 由于我不是 Java 开发人员并且我不知道您使用的是哪种 Java 服务器,因此我提供了 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 服务器上使用它。您现在要做的就是验证 token 以验证用户是否从 Java 网站 (SiteA) 重定向。

NodeJS 服务器获取该请求并检查 header 。

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");
}
});

如果 token 有效,用户可以访问网站 www.SiteB.com,否则用户将被重定向回 www.SiteA.com

设置起来可能有点麻烦。有一种更简单的方法。

备选方案:

Java 服务器端登录逻辑是相同的,只是现在将 token 添加为查询参数。

类似于:

www.SiteB.com/autologin?Token=ldkasjodauh21i7ds8yuh

您可以直接将其作为 href 添加到您的重定向链接中。

将您的 AngularJS 应用程序设置为从 URL 获取 token 并向您的 nodejs 服务器或 Java 服务器调用 API 以验证 token 。

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 服务器示例

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 上使用的服务器类型。如果您能提供有关您在站点 A 上使用的服务器类型的更多信息,我将能够更准确地帮助您。

关于java - 允许从站点 A 访问站点 B,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49622993/

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