Azure AD从.auth/ME中登录Java JSP API中的用户



我有一个简单的Web应用程序,该应用程序使用JSP和Tomcat具有Java API后端。我如何获取登录用户的电流(通过Azure AD登录)?

我正在尝试:

<%
// Fetch the data
URL url = new URL("https://myurl.azurewebsites.net/.auth/me");
Cookie cookie = null;
Cookie[] cookies = request.getCookies();
URLConnection connection = url.openConnection();
for(int i=0; i < cookies.length; i++) {
   cookie = cookies[i];
   connection.addRequestProperty(cookie.getName(), cookie.getValue());
}
// Convert to a JSON object
JsonParser jp = new JsonParser();
JsonElement root = jp.parse(new InputStreamReader(connection.getInputStream()));
JsonObject rootobj = root.getAsJsonObject();
String userID = rootobj.get("user_id").getAsString();

但这是一个未经授权的错误。但是,我可以在浏览器中从/.auth/me中获得JSON-大概是因为它正在发送会话cookie。有什么想法我如何从JSP获取JSON?

根据您提供的代码,我想您想在JSP中接收传入的cookie并模拟请求URL https://myurl.azurewebsites.net/.auth/me以获取JSON数据。

但是,您错过了请求的Header部分,这是Azure Active Directory的身份验证的必要条件。

您可以参考以下代码段并重试您的请求。

<%
// Fetch the data
URL url = new URL("https://myurl.azurewebsites.net/.auth/me");
Cookie cookie = null;
Cookie[] cookies = request.getCookies();
HttpsURLConnection connection = (HttpsURLConnection)url.openConnection();
for(int i=0; i < cookies.length; i++) {
   cookie = cookies[i];
   connection.addRequestProperty(cookie.getName(), cookie.getValue());
}
Enumeration<String> headNames = request.getHeaderNames();
while(headNames.hasMoreElements()) {
    String headerName = headNames.nextElement();
    String headerVal = request.getHeader(headerName);
    connection.addRequestProperty(headerName, headerVal);
}
out.println("generate connection.....");
connection.connect();
IOUtils.copy(new InputStreamReader(connection.getInputStream()),out);
%>

希望它对您有帮助。

最新更新