使用Spring Boot以基本身份验证自动登录客户端到其他网站

时间:2018-10-31 04:39:09

标签: java spring login basic-authentication apache-httpclient-4.x

我有一个网站可以称为AutoLoginSite(http://mainsite.dev) 另一个需要基本身份验证才能浏览其他页面的网站称为MainSite(我无法触摸

因此,当用户从AutoLoginSite打开url时,它将重定向到具有身份验证状态的MainSite。

所以我想做的是,我使用Spring Boot在AutoLoginSite应用程序中创建自动登录控制器,这是该控制器:

@RequestMapping("/login")
public void login(HttpServletResponse servletResponse) {
    String loginUri = "http://mainsite.dev/authenticate";
    String redirectUri = "http://mainsite.dev/my-account/cards";
    String username = "customer";
    String password = "c123";

    DefaultHttpClient httpclient = new DefaultHttpClient();

    try {
        String encoding = Base64.getEncoder().encodeToString((username + ":" + password).getBytes());

        HttpPost httppost = new HttpPost(loginUri);
        httppost.setHeader("Authorization", "Basic " + encoding);

        System.out.println("executing request " + httppost.getRequestLine());
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();

        System.out.println("Status : " + response.getStatusLine().getStatusCode());

    } catch(Exception ex) {
        ex.printStackTrace();
    }

    servletResponse.setHeader("Location", redirectUri);
    servletResponse.setStatus(302);
}

我知道我做错了,因为经过身份验证的用户是AutoLoginSite服务器,而不是AutoLoginSite客户端。 如何自动将客户端登录到其他网站,以便他们可以访问所有MainSite安全页面?

1 个答案:

答案 0 :(得分:0)

对于您的用例,您应该实现OAuth 2.0。这样,您的 AutoLoginSite 将用作资源服务器 MainSite 的身份验证服务器。 第一个用户将必须登录到您的身份验证服务器,成功身份验证后,您的AutoLoginSite将发出授权代码,然后该代码可用于对资源服务器上的用户进行授权。 OAuth 2针对不同的用例提供了几种“授权类型”。您需要确定需求并相应地使用。

访问本文可以帮助您获得有关该主题的更多信息。 https://medium.com/@akourtim.ahmed/oauth-2-centralized-authorization-with-spring-boot-2-0-2-and-spring-security-5-and-jdbc-token-store-8dbc063bd5d4

Spring OAuth 2.0: https://projects.spring.io/spring-security-oauth/docs/oauth2.html