允许从站点 A 访问站点 B
Allow access to site B from site A
我猜今天常用的术语是"Single Sign On"
。
请允许我解释一下我的情况。如果我使用了错误的术语或者我的解释不清楚,请原谅我,因为我不是一个特别好的开发人员,也不是一个架构师。
I have Site A (eg. www.siteA.com) and Site B (eg. www.siteB.com)
站点 A 是一个 Java 项目,而站点 B 是一个 Angular JS + Node JS 项目 (MyEAN Stack)。
一个link会在站点A上提供到站点B。但是,只有在站点A上成功登录后才能查看站点B上的页面。
流程是。
- Log in on Site A
- Click on link to Site B
- Site B loads
如果用户尝试访问 www.siteB.com,将不允许他们访问。您必须通过站点 A。因此请求必须至少来自站点 A。 SiteB 目前没有登录页面。
注:- The 2 sites are different domains.
我想知道我应该从哪里开始寻找我应该如何实现它。任何形式的想法都会很棒,因为我一直在阅读和阅读,但还没有找到一个好的起点。可能我看错地方了
单点登录是一种可能性,您可以使用身份服务器与两个截然不同的站点进行通信。有几种可能性,一种常见的可能性是 SAML 技术。其他包括 CAS 和 OAuth。
请在 Google or/and Whosebug 上搜索术语。由于您可以直接控制 这两个站点,如果有更简单的方法,您不需要 使用 SSO。 @newman 的回答可能有效。
如果您想与外部应用程序集成,SSO 可能会更好,这对您来说可能重要也可能不重要。请在继续之前考虑您的问题。
您可以使用 JWT 创建授权令牌。它应该从站点 A 重定向发送。之后您应该在站点 B 上创建会话。
使用 JWT(Java 网络令牌)
在 SiteA 上登录后。当用户被重定向到 siteB 时,将向用户提供一个令牌,该令牌将传递到 SiteB。通常令牌在 Header 秒内传递。
进程:
一旦用户登录到 SiteA。用户被提供了一个令牌(JWT)。当用户单击 link 到 SiteB 时,用户将被重定向到类似 www.siteA.com/redirect
的内容。 java 网络服务器收到此请求并作为响应发送新的 link,令牌在 Header 中,状态代码为 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 服务器上使用它。您现在要做的就是验证令牌以验证用户是否从 Java 网站 (SiteA) 重定向。
NodeJS 服务器获取该请求并检查 headers。
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 服务器端登录逻辑是相同的,只是现在将令牌添加为查询参数。
类似于:
www.SiteB.com/autologin?Token=ldkasjodauh21i7ds8yuh
您可以在重定向时直接将其添加为 href
link。
设置您的 AngularJS 应用程序以从 URL 获取令牌并向您的 nodejs 服务器或 Java 服务器发出 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 服务器示例
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 上使用的服务器类型的信息,我将能够更准确地帮助您。
我猜今天常用的术语是"Single Sign On"
。
请允许我解释一下我的情况。如果我使用了错误的术语或者我的解释不清楚,请原谅我,因为我不是一个特别好的开发人员,也不是一个架构师。
I have Site A (eg. www.siteA.com) and Site B (eg. www.siteB.com)
站点 A 是一个 Java 项目,而站点 B 是一个 Angular JS + Node JS 项目 (MyEAN Stack)。
一个link会在站点A上提供到站点B。但是,只有在站点A上成功登录后才能查看站点B上的页面。
流程是。
- Log in on Site A
- Click on link to Site B
- Site B loads
如果用户尝试访问 www.siteB.com,将不允许他们访问。您必须通过站点 A。因此请求必须至少来自站点 A。 SiteB 目前没有登录页面。
注:- The 2 sites are different domains.
我想知道我应该从哪里开始寻找我应该如何实现它。任何形式的想法都会很棒,因为我一直在阅读和阅读,但还没有找到一个好的起点。可能我看错地方了
单点登录是一种可能性,您可以使用身份服务器与两个截然不同的站点进行通信。有几种可能性,一种常见的可能性是 SAML 技术。其他包括 CAS 和 OAuth。
请在 Google or/and Whosebug 上搜索术语。由于您可以直接控制 这两个站点,如果有更简单的方法,您不需要 使用 SSO。 @newman 的回答可能有效。
如果您想与外部应用程序集成,SSO 可能会更好,这对您来说可能重要也可能不重要。请在继续之前考虑您的问题。
您可以使用 JWT 创建授权令牌。它应该从站点 A 重定向发送。之后您应该在站点 B 上创建会话。
使用 JWT(Java 网络令牌) 在 SiteA 上登录后。当用户被重定向到 siteB 时,将向用户提供一个令牌,该令牌将传递到 SiteB。通常令牌在 Header 秒内传递。
进程:
一旦用户登录到 SiteA。用户被提供了一个令牌(JWT)。当用户单击 link 到 SiteB 时,用户将被重定向到类似 www.siteA.com/redirect
的内容。 java 网络服务器收到此请求并作为响应发送新的 link,令牌在 Header 中,状态代码为 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 服务器上使用它。您现在要做的就是验证令牌以验证用户是否从 Java 网站 (SiteA) 重定向。
NodeJS 服务器获取该请求并检查 headers。
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 服务器端登录逻辑是相同的,只是现在将令牌添加为查询参数。
类似于:
www.SiteB.com/autologin?Token=ldkasjodauh21i7ds8yuh
您可以在重定向时直接将其添加为 href
link。
设置您的 AngularJS 应用程序以从 URL 获取令牌并向您的 nodejs 服务器或 Java 服务器发出 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 服务器示例
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 上使用的服务器类型的信息,我将能够更准确地帮助您。