代理应在浏览器中使用ssotoken设置cookie iplanetdirectorypro。这是我用来从cookie中获取iplanetdirectorypro令牌的一些代码。基本上它使用内置的JQuery操作来获取cookie。我希望它可以帮助您解决无法获取令牌的问题。
然后,我通过ajax调用服务器以获取用户详细信息,并返回静态列表。您可以使用它,因为它验证用户是否已经过身份验证,令牌有效,或者根据您的需要进行更改。这有点超出了你的问题的范围,但我认为我将其作为潜在的下一步包括在内。
几个注意事项:您需要从cookie或会话中获取用户ID才能使用它。此外,我使用一个按钮单击“button2”来调用脚本并将其放回到输出获取用户详细信息中,您可能需要更改以反映您的呼叫。
我希望这有帮助。
$(function() { $(".btn.button2").click(function() { var frapptokenid = readCookie('iPlanetDirectoryPro'); var frappusername = readCookie('frappusername'); $.ajax({ url: "http://rocklabs.openrock.org:8181/openam/json/users/" + frappusername, type: "GET", headers: { "accept": "application/json", "dataType": "jsonp", "content-type": "application/json;odata=verbose", "iplanetdirectorypro": frapptokenid, }, $('#get-user-details').append( $('#output-get-user-details').append( ` <div> <div> <form style="display:inherit; word-wrap:break-word; white-space: normal"> <table align="center"> <thead> <tr bgcolor="#233f6d"> <th>Attribute</th> <th>Returned Data</th> </tr> </thead> <tbody style="text-align:left"> <tr> <td>User ID</td><td>${data.username}</td> </tr> <tr> <td>Surname</td><td> ${data.sn}</td> </tr> <tr> <td>Given Name</td><td> ${data.givenName}</td> </tr> <tr> <td>Phone Number</td><td> ${data.telephoneNumber}</td> <tr> <td>Email Address</td><td> ${data.mail}</td> </tr> <tr> <td>Universal ID</td><td> ${data.universalid}</td> </tr> </tr> </tbody> </table> </form> </div> </div> ` ) )}, failure: function(data) { console.log(data); } }); }); }); /*Functions for creating, reading and deleting cookies*/ function createCookie(name,value,days) { if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+value+expires+"; path=/"; } function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } function eraseCookie(name) { createCookie(name,"",-1); }
当我没有从浏览器访问令牌(HTTPOnly cookie)而不进行到JBoss服务器的往返只是为了访问cookie时,如何检查登录状态。
如果您处于HTTPOnly cookie模式的客户端(浏览器)并且想要检查SSOToken cookie的有效性(默认名称iPlanetDirectoryPro),那么您可以调用AM服务器上的会话端点。您不需要获取cookie - 浏览器会将其添加到传出请求中 - 如果成功验证,它将返回令牌的详细信息。这样您就无法在客户端代码中获取令牌,但您可以解决它并回答您的问题。
请求:
POST /openam/json/sessions?_action=getSessionInfo HTTP/1.1 Host: myserver.com:8080 Content-Type: application/json Cookie: iPlanetDirectoryPro=... <-- added by browser, not in code Accept-API-Version: protocol=1.0,resource=2.0 Cache-Control: no-cache {}
响应:
{ ????"username": "demo", ????"universalId": "id=demo,ou=user,dc=openam,dc=forgerock,dc=org", ????"realm": "/", ????"latestAccessTime": "2017-09-28T20:15:17Z", ????"maxIdleExpirationTime": "2017-09-28T20:45:17Z", ????"maxSessionExpirationTime": "2017-09-28T22:15:16Z", ????"properties": {} }