【问题标题】:Cordova Hybrid app integration with Siteminder Protected REST resourceCordova 混合应用程序与 Siteminder 受保护的 REST 资源集成
【发布时间】:2016-08-22 11:56:45
【问题描述】:

我有一个 HTML5/JQuery cordova 混合应用程序,它与外部 REST 网络服务通信以获取页面动态内容的数据。这些 REST 资源受 Siteminder SSO 保护。对 web 服务的所有调用都被 siteminder 拦截,如果会话不活跃,它会抛出 siteminder 登录挑战页面。

我们如何处理移动应用中的siteminder登录页面?

目前我们有 index.html 在其上加载,页面(index.html)被提交并命中受保护的 REST 服务,但 siteminder 拦截以抛出挑战页面。身份验证后,它可以访问受保护的 REST 服务,并从 REST 服务返回“成功”的 json 结果。

基于此,我们需要通过siteminder cookie上的移动passign调用其他页面/REST服务进行会话验证。实现这一目标的正确方法是什么?

【问题讨论】:

    标签: jquery web-services rest cordova siteminder


    【解决方案1】:

    最后我已经能够使用以下方法使其工作:

    1. 所有 REST 资源 URL 都必须受到站点管理员的保护。

    2. 定义一个 GET 服务,它也是一个受保护的资源,将用于启动 siteminder 会话。 例如

      @Context private HttpServletRequest httpRequest;
      
      @GET  
      @Path("/OAMSSO")
      @Produces(MediaType.APPLICATION_JSON)
      public Response getOAMSSO() {
      URI uri = null;  UriBuilder uriBuilder = null;
      String redirectHost = "https://localhost/callback";     
      uri = uriBuilder.queryParam("statusCode", "100")
                      .queryParam("authenticated", "true")
                      .queryParam("userName",                              
      headers.getHeaderString("SM_USER")).build();
      return Response.seeOther(uri).build();
      

      }

    3. 在您的 JS 中,以下代码将在 InAppBrowser 中启动 siteminder SSO 身份验证。 InAppBrowser 是一个 Cordova 插件,需要添加到您的项目中。

    cordova 插件添加cordova-plugin-inappbrowser

    function getParameterByName(url, name) {
      var match = RegExp('[?&]' + name + '=([^&]*)').exec(url);
      return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
    }
    
    document.addEventListener("deviceReady", "onDeviceReady",false);
    function onDeviceReady() {
        callOAMSSO();
    }
    
    function callOAMSSO() {     
           var url = **<<yourProtectedServiceURL>>**/OAMSSO";
           var target = '_blank';
           var options = "location=yes,toolbar=yes,clearcache=yes,clearsessioncache,enableViewportScale=yes";
           var redirectURL = "https://localhost/callback";
           
           var ref = cordova.InAppBrowser.open(url, target, options);
    
           ref.addEventListener('loadstart', loadstartCallback);
           ref.addEventListener('exit', exitCallback);
           
           function loadstartCallback(event) {                                       
               var url = event.url;            
               if(url.indexOf(redirectURL) > -1){
                   ref.close();                
                   var statusCode = getParameterByName(url, 'statusCode');
                   var authenticated = getParameterByName(url, 'authenticated');
                   var userName = getParameterByName(url, 'userName');
                   
                   if(statusCode && userName){
                       sessionStorage.userName = userName.toUpperCase();
                       sessionStorage.userNameisValid = "Y";               
                   
                       setTimeout(**invokeYourFunctionForOtherTasks**, 10);
                   }
                }
           }
           
           function exitCallback() {
               alert('Browser is closed...');
           }        
    }
    
    1. 当您的应用打开时,InAppBrowser 将打开,并尝试获取受 OAMSSO 保护的资源。 Sicne 它受站点管理员保护并且没有可用的会话,SSO 页面在浏览器中打开,用户可以在其中输入凭据并提交。如果凭据成功,siteminder 将添加 SMSESSION cookie,然后重定向到 OAMSSO REST 资源。 OAMSSO REST 资源提取经过站点管理员身​​份验证的用户名,并作为查询参数附加到回调方法,即重定向到 localhost/callback。这只是一个虚拟 URL,用于标识用户已通过站点管理员身​​份验证。在 JS 中,您可以检查此 URL 加载,提取用户名,然后继续执行应用程序的其他任务。由于 siteminder 会话已经处于活动状态,您可以从您的应用访问 REST 服务的其他受保护资源。

      希望这可以帮助任何处理来自 Javascript 的站点管理员 SSO 身份验证的人。

    【讨论】:

      猜你喜欢
      • 2016-03-10
      • 2016-07-21
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      • 2012-08-13
      相关资源
      最近更新 更多