gpt4 book ai didi

jquery - Cordova 混合应用程序与 Siteminder protected REST 资源集成

转载 作者:行者123 更新时间:2023-12-01 04:40:27 25 4
gpt4 key购买 nike

我有一个 HTML5/JQuery cordova 混合应用程序,它与外部 REST Web 服务通信以获取页面动态内容的数据。这些 REST 资源受 Siteminder SSO 保护。对 Web 服务的所有调用都会被 siteminder 拦截,如果 session 未处于事件状态,则会弹出 siteminder 登录质询页面。

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

目前,我们有index.html,在onload上,页面(index.html)被提交并访问 protected REST服务,但siteminder拦截并抛出质询页面。身份验证后,它可以访问 protected REST 服务,并从 REST 服务返回“成功”的 json 结果。

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

最佳答案

最后我能够通过以下方法让它工作:

  1. 所有 REST 资源 URL 都必须受 siteminder 保护。

  2. 定义一个 GET 服务,该服务也是 protected 资源,将用于启动 siteminder session 。例如

    @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...');
}
}
  • 当您的应用程序打开时,InAppBrowser 将打开,并尝试获取 OAMSSO protected 资源。由于受站点管理器保护并且没有可用 session ,SSO 页面会在浏览器中打开,用户可以在其中输入凭据并提交。如果凭据成功,siteminder 将添加 SMSESSION cookie,然后重定向到 OAMSSO REST 资源。 OAMSSO REST 资源提取经过身份验证的站点管理器用户名,并将其作为查询参数附加到回调方法,即重定向到 localhost/callback。这只是一个虚拟 URL,用于标识用户已通过 siteminder 进行身份验证。在 JS 中,您可以检查此 URL 加载,提取用户名,然后继续执行应用程序的其他任务。由于 siteminder session 已处于事件状态,因此您可以从应用程序访问 REST 服务的其他 protected 资源。

    希望这可以帮助任何通过 Javascript 处理 siteminder SSO 身份验证的人。

  • 关于jquery - Cordova 混合应用程序与 Siteminder protected REST 资源集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39078951/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com