如何使用Web登录页面凭据对REST Web服务进行身份验证

时间:2019-02-14 16:55:14

标签: java rest web-services authentication login

我有一个应用程序A(客户端),该应用程序对应用程序B(服务器)进行了Web服务GET调用。应用程序B使用网页身份验证重定向来处理所有这些传入的Web服务获取请求调用。 AppB正在处理GET请求,例如:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
        {
// code lines
//....
..
String login_URL = "https://sometestsite.com/pagLogin";
StringBuffer baseURL = request.getRequestURL();
String query = request.getQueryString();
String encReturnURL = URLEncoder.encode(baseURL.toString() + "?" + query, "UTF-8");
String final_URL = login_URL + encReturnURL ;
Cookie[] cookies = request.getCookies();
    if ((cookies == null) || (cookies.length == 0))
    {
        response.sendRedirect(noCookieURL);
                return;
    }
String cookieValue= null;

for (int i = 0; i < cookies.length; i++)
        {
            Cookie thisCookie = cookies[i];
            String cookieName = thisCookie.getName();

            if (cookieName == null)
            {               
                //logger.info("cookieName is null");
            }
            //logger.info("cookieName is " + cookieName);

            if (cookieName.equals("myCookie"))
            {           
                cookieValue = thisCookie.getValue();
                break;
            }
        }

String ESEncypt = esGatekeeper.esGatekeeper(cookieValue,"password");
if(ESEncrypt satisfies some condition){
    // construct output message and response
    String output = "{Some JSON message}";
    response.setContentType("application/json");
    response.getWriter().append(output);
}

}

我正在appA(客户端)上工作,向appB(服务器)发出请求,appA是基于Java,REST,基于Spring Boot的微服务的。

Question: How can I successfully get through this authentication?

1)在appA中,我尝试使用ApacheHttpClient和URLConnection建立与url的连接:https://sometestsite.com/pagLogin。并尝试使用setRequestProperty("cookieName","value")上的HttpURLConnection向服务器appB发送cookie。

2)由于在没有cookie的情况下appB使用sendRedirect,如何(最好的做法)是将登录凭据和get请求一起从appA发送到appB,以便appB在做出{{1 }}。

1 个答案:

答案 0 :(得分:0)

该设置似乎已实现了OAuth2.0授权代码授予类型。在OAuth2.0术语中,承载登录页面的服务器称为“授权服务器”,承载API或任何需要身份验证的网站的服务器称为“资源服务器”,而尝试使用api的应用程序称为“客户端”。 / p>

现在,如果“客户端”代表用户执行操作(考虑到最终用户要登录Web应用程序),则您描述的设置是正确的设置。可以使用“授权码”授予类型,“隐式”授予类型和“资源所有者密码凭证”授予类型中的任何一种,它们都会将用户重定向到如上所述的登录页面。

但是,当“客户”不代表您的情况代表任何单个用户(例如批处理作业)时,要使用的授权类型为“客户凭证”授权类型。在这里,不会重定向到登录页面。相反,“客户端”将使用客户端ID和客户端机密直接与“授权服务器”通信,而“授权服务器”将返回访问代码。客户端可以使用访问代码(可以通过cookie)与“资源服务器”中的api进行通信。

有关完整的详细信息,请参阅RFC 6749 OAuth2.0规范中的“客户端凭据”授予类型描述。