2015-10-15 90 views
3

我有一個Bluemix Web應用程序(Liberty for Java),它實現了一些Web服務。這些Web服務應該從移動應用程序(Android)中調用。現在,我已通過將此Web應用程序綁定到具有在SSO服務中創建的雲目錄的Bluemix Single Sign On服務(SSO)來保護此Web應用程序。從網絡瀏覽器使用網絡應用程序工作正常;但是,從SSO服務獲取訪問令牌時遇到問題,這將允許移動應用程序調用服務。Bluemix,SSO:從移動應用程序調用REST服務(公共客戶端,本地應用程序)

從OAuth2規範(IETF RFC 6749)中,我發現採用「公共客戶端」(如OAuth2規範的第2.1條中所述)使用「密碼」的「本機應用程序」配置文件「授予類型(OAuth2規範,條款4.3」資源所有者密碼憑據授予「)。

我用Android框架春季爲此目的,併爲此代碼應該是這樣的:

ResourceOwnerPasswordResourceDetails resourceDetails = 
    new ResourceOwnerPasswordResourceDetails(); 
resourceDetails.setId("dtu-se2-e15-cloud-directory"); 
resourceDetails.setAccessTokenUri(APP_SSO_API_ACCESS_TOKEN_URI); 
resourceDetails.setClientId(APP_SSO_API_CLIENT_ID); 
resourceDetails.setClientSecret(APP_SSO_API_CLIENT_SECRET); 
resourceDetails.setGrantType("password"); 
resourceDetails.setScope(Arrays.asList(SCOPE)); 
resourceDetails.setUsername(USERNAME); 
resourceDetails.setPassword(PASSWORD); 

OAuth2RestTemplate restTemplate = new OAuth2RestTemplate(resourceDetails); 
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); 

UserPosition newPosition = restTemplate.postForObject(
    POST_POSITION_SERVICE_URI, position, UserPosition.class); 

但是,我不認爲這個代碼的問題,並最終獲得了我的實驗訪問令牌直接與捲曲:

其實,我嘗試使用兩種不同的客戶提供不同的OAuth2令牌端點:

  • 我創建了一個客戶端(和客戶端憑據),這是我在Bluemix SSO服務中創建的。我嘗試了OAuth2令牌端點URI和創建的客戶端憑證。但似乎這個端點完全不支持授權類型「密碼」。看起來,該客戶端不被端點視爲公共客戶端。

  • 我還嘗試了Web應用程序本身的憑據和OAuth令牌端點URI(我在VCAP_SERVICES環境變量中查找)。這個終點似乎支持授予類型「密碼」;但我可以想到的所有請求變體仍在響應:invalid_resource_owner_credential

正如我所說的,我用捲曲嘗試請求的許多不同的變化對這些 令牌端點:

  • 使用的令牌端點URI兩個SSO服務與Web應用程序憑據 以及在雲目錄API訪問創造了一個

  • 試圖GET和POST(沒有任何區別)

  • 試圖內容類型:應用/ X WWW的窗體-urlencoded內容類型:應用/ JSON(兩者似乎具有相同效果的工作)

  • 提供CLIENT_ID只有(總是不成功)

  • 提供在體內或參數的客戶端憑證,以及 authenication信息的標題(其實,我不喜歡提供客戶端機密的Android應用程序的想法 ,但我也試過);

  • 作爲用戶名,我嘗試了名稱,因爲我在註冊新用戶時在Web瀏覽器重定向 中創建了它;但我也嘗試了請求的安全上下文所提供的用戶名(當用戶登錄成功從Web瀏覽器調用 服務時);我甚至嘗試了校長 ACCESSID(這些非工作,我總是得到:invalid_resource_owner_credential

  • 使用不同的範圍,並沒有在上面(和不同組合的所有

無)將導致成功的 響應和用戶的訪問令牌。我可以得到的「最好」是一個響應 invalid_resource_owner_credential(使我相信至少在某些情況下接受的客戶端是 )。

不幸的是,我沒有找到很多事情,可能涉及客戶 訪問進行配置(和公共機構提供服務,特別是),和我沒有上 發現很多文檔,其中的OAuth2協議的子集(批類型和配置文件)受Bluemix SSO服務和附帶的雲目錄的支持。

誰能告訴我如何從一個移動應用(Android)作爲一個公共客戶端Bluemix Web應用程序 (自由的Java)或如何設置 了Bluemix Web應用程序和SSO服務,其認證它是綁定的,所以這是 可能的。如果重要,我正在Bluemix的「美國南部」 地區以及IBM Academic Initiative成員帳戶下使用Bluemix。

我寧願一個解決方案,其中移動應用程序不需要知道客戶 祕密,但如果這是使這項工作現在,將客戶端 憑證到移動應用程序將是確定的唯一途徑。

我將不勝感激任何幫助解決這一問題,在此先感謝,

Ekkart

+0

Bluemix SSO服務當前不支持此方案。它在路線圖中。你的時間表是如何實現的? –

+0

感謝您的信息。這是一些學生項目在我的一門課程中所需要的;具體的學生項目已完成 - 使用一些解決方法。但是,我可能會在2016年秋季繼續這些項目(也可能需要其他學生項目的此功能)。所以在2016年8月之前擁有這個功能會很棒。我很確定很多其他人都可以使用此功能。 –

回答

0

Bluemix有一個稱爲移動客戶端訪問,可以幫助促進安全爲您的移動應用專門針對移動設備的服務。要閱讀它,請登錄到Bluemix並在Mobile類別下查找它。要在此處提問,請使用[bluemix-mobile-services]標籤進行搜索。

相關問題