2016-08-22 57 views
1

我正在iOS上創建應用程序,該應用程序將以「信息亭」模式運行。部分應用程序要求用戶能夠搜索組織的目錄。我想通過Azure圖形API支持Azure AD以提供此功能。iOS上針對Azure圖形API的非交互式登錄(緩存憑據)

我不想在應用程序啓動時需要交互式登錄,我不想使用其他Web服務;我希望iOS應用程序通過REST簡單訪問Azure圖形API。

我意識到與緩存憑據相關的風險,但是對於非交互式登錄使用「服務帳戶」已相當完善,訪問是隻讀的,憑據可以在iOS鑰匙串中保護。

我已經瀏覽了大量的Azure示例並閱讀了文檔,並且似乎提供了我需要的方法acquireToken(resource, credential)在iOS ADAL庫(並且是ClientCredential類)中不可用。

爲了澄清,這是我想怎麼我的應用程序的工作:

  1. 用戶安裝從App Store的應用程序,並運行它第一次
  2. 當他們到Azure的身份驗證設置的一部分AD通過提供他們的租戶,應用程序客戶端ID和應用程序密鑰。如果他們不能與應用程序鍵進行身份驗證,用戶名/密碼是可以接受的,只要:
  3. 他們從來沒有得到提示進行身份驗證再次

是否有解決方案或在這裏我只是放棄Azure AD?

+0

沒有iOS上的服務帳戶的概念。將窗口工件和定義帶入iOS似乎在推斷。 –

+0

另外,使用交互式登錄從您的應用程序訪問圖形時出現什麼問題?您需要做的就是獲取圖形的標記作爲資源並使用您的公共客戶機標識。 –

+0

我只是用它來解釋這個概念。 「服務帳戶」將被iOS應用程序*使用*。它將存在於Azure AD中(或者最好是一個Azure AD應用程序定義,它具有客戶端ID和密鑰而不是用戶名和密碼)。 – Paulw11

回答

0

這可以完成,但不能與ADALiOS框架一起完成,因爲它不公開授權,使其可以正常工作。

我能夠使用p2/OAuth構建一個工作演示。該示例應用程序是here

建立一個有效的解決方案的步驟是:

  1. 登錄到傳統的Azure Management portal,並選擇您的Azure的AD實例
  2. 創建的廣告實例的新應用
    1. 選擇「添加我的組織正在開發的應用程序」
    2. 指定一個名稱並選擇「Web應用程序和/或Web API」而不是「本機客戶端應用程序」
    3. 輸入登錄網址和應用程序ID網址的值。這些需要是格式良好的URL,但不需要可到達
  3. 一旦創建了應用程序,請選擇「配置」。注意客戶端ID - 你會需要這個
  4. 在「密鑰」的選擇,選擇從下拉1年或2年,然後單擊「保存」
  5. 一旦密鑰被顯示,複製本,並保存它某處;它不能再顯示。
  6. 設置所需的「權限到其它應用程序」,讓您的應用程序,它需要
  7. 最後的訪問,在屏幕上點擊「查看端點」的底部 - 你需要複製的OAuth 2.0令牌端點和OAuth 2.0用戶授權端點
  8. 下載從GitHub演示代碼
  9. 運行pod install
  10. 插上值到Settings.plist文件
  11. 運行應用程序

認證過程的肉是成立的OAuth2ClientCredentials一個實例 -

let settings = [ 
     "client_id": appData.clientId!, 
     "client_secret": appData.secret!, 
     "authorize_uri": appData.authString!, 
     "token_uri": appData.tokenString!, 
     "keychain": true, 
     "secret_in_body": true 
     ] as OAuth2JSON 

self.oauth2 = OAuth2ClientCredentials(settings: settings) 

然後就可以調用doAuthorize()獲得令牌

self.oauth2.doAuthorize()