Android应用程序

时间:2015-10-05 09:46:02

标签: android liferay saml saml-2.0

我在android上有一个连接到Liferay Portal后端的移动应用程序。有没有使用SAML2从Android应用程序登录的解决方案? Liferay SDK不提供saml支持。或者任何人都可以帮我提供一些我可以用来完成这项任务的资源吗?

谢谢!

我附上了关于我现在正在做什么的更多细节。 由于移动设备上没有SAML支持,因此我使用webview访问用户输入电子邮件和密码的登录页面。登录成功后,我想将来自webview的cookie与http客户端同步,以便能够从本机代码向API发出请求。

当页面加载完毕后,我调用方法在

中同步我的cookie
CookieStore from a DataHolder class
webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        Log.d(Consts.DONI_APP_DEBUG_TAG, "---> Page start loading: " + url);
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        syncCookiesFromAppCookieManager(url);
    }
});

public void syncCookiesFromAppCookieManager(String url) {

    CookieManager cookieManager = CookieManager.getInstance();
    if (cookieManager == null) return;

    RFC2109Spec cookieSpec = new RFC2109Spec();
    String rawCookieHeader = null;
    try {
        URL parsedURL = new URL(url);

        //Extract Set-Cookie header value from Android app CookieManager for this URL
        rawCookieHeader = cookieManager.getCookie(parsedURL.getHost());

        if (rawCookieHeader == null) return;

        //Convert Set-Cookie header value into Cookies w/in HttpClient CookieManager
        int port = parsedURL.getPort() == -1 ?
                parsedURL.getDefaultPort() : parsedURL.getPort();

        CookieOrigin cookieOrigin = new CookieOrigin( parsedURL.getHost(),
                port,
                "/",
                false);

        String[] sCookies = rawCookieHeader.split(";");
        List<Cookie> appCookies = new ArrayList<Cookie>();
        for(String c : sCookies){
            String[] cc = c.split("=");
            DataHolder.cookieStore.addCookie(cookieSpec.parse(
                new BasicHeader("set-cookie", c),
                cookieOrigin).get(0));
        }

        CookieSyncManager.getInstance().sync();
    } catch (MalformedURLException e) {
        // Handle Error
        Log.d(Consts.DONI_APP_DEBUG_TAG, "Error 1!");
    } catch (MalformedCookieException e) {
        // Handle Error
        Log.d(Consts.DONI_APP_DEBUG_TAG, "Error 2!");
    }
}

毕竟,我将cookiestore附加到httpClient并发出请求: DefaultHttpClient httpClient = new DefaultHttpClient(); httpClient.setCookieStore(DataHolder.cookieStore);

HttpGet httpGet = new HttpGet(url);
httpGet.setHeader("Content-type", "application/json");

try {
    HttpResponse response = httpClient.execute(httpGet);

    HttpEntity resEntity = response.getEntity();
    if(resEntity != null){
        String responseStr = EntityUtils.toString(resEntity).trim();
        Log.d("LOG", "Response: " + responseStr);
    }
}catch (IOException e){
    e.printStackTrace();
}

我在请求之前测试了httpClient的cookie,并显示它们已附加,但请求返回登录html页面而不是来自api的响应。 我还用2个不同的webview测试了这个。我在第一个webview中登录,然后在第二个webview中加载api url并且它可以工作。

我做错了什么?我还注意到有很多类被弃用,但这是我在其他论坛上找到的与此相关的唯一资源。

非常感谢!

0 个答案:

没有答案