2016年5月28日 星期六

讓Xamarin開發的App取得在AzureAD保護下的Web資料…II

 

延續前一篇我們已經建立好AzureAD的資訊,並且已經開通Azure AD上的一個使用者帳號後,我們要繼續開通AzureAD上給Native App連入的服務。

在Azure Portal當中開啟Azure AD的服務頁面

2-1


接著點選"加入"

2-2


點選"加入我的組織正在開發的應用程式"

2-3


填寫你的應用程式在AzureAD上的管控的名稱。

2-4


記得點選成下面的"原生用戶端應用程式"

2-5


填寫重新導向URL,這個URL是在程式當中會用到的值,請填寫一個帶有http:// or https://的隨意網址,點選下方的勾勾。

2-6


原生用戶端應用程式建立完成

2-7


接著在剛剛建立好的"原生用戶端應用程式"頁面點選"設定"。

2-8


在"設定"頁面當中,注意"用戶識別碼"中間的GUID,這個數值在我們的程式當中會用到。

2-9


在"設定"頁面當中往下拉,會看到其他應用程式的權限,在這邊我們將Windows Azure Active Directory的委派權限勾選"Read directory data"、"Sign in and read profile"這兩個權限。

2-10


勾選好後記得按"儲存"。

2-11


以上設定都完成後,接下來終於可以切到Visual Studio上做事情了~~

在下面的範例中我們使用Xamarin.Android作為展示範例,若要完成Xamarin.iOS的做法其實也是大同小異,看官可以自行斟酌。

首先,就先來建立一個Xamarin.Android的空專案。

3-1


接著打開Nuget管理套件,搜尋"Microsoft.IdentityModel.Clients.ActiveDirectory",在5/24微軟已經更新到3.10.305231913的穩定版本,我們就直接點選"安裝"。

3-2


檢閱變更,點選"確定"。

3-3


接受授權點選"我接受"。

3-4


安裝完成。

3-5


接下來,先來調整一下畫面的Layout,打開Main.axml這個檔案,並將畫面設計為如綠色框的呈現(可參照下面的Source圖)。上方的Button命名為signinButton,此按鈕下面還有個TextView,命名為messageTextView。在下方的Button命名為signoutButton。

3-6

3-7


接著打開MainActivity.cs

3-8


首先,先加入ADAL的Namespace。

3-9


接著加入跟AzureAD互動需要用到的幾個固定字串(如綠色框所示),並設立一個ADAL當中的AuthenticationResult變數,準備紀錄跟AzureAD驗證後回傳來的結果。

3-10

第一個紅色線所標註的是前面在AzureAD建立的"原生用戶端應用程式"時所產生的用戶識別碼的Guid。

第二條紅色線所標住的是前面在AzureAD建立的"原生用戶端應用程式"時所設定的"重新導向URL"。

橘色線所標註的就直接填寫圖中所示的網址。


接著在Activity當中,複寫掉OnActivityResult這個方法,並加上綠色框的程式碼,以便跳到AzureAD驗證頁面輸入完帳號密碼後,驗證成功的資料回傳紀錄。

3-11


再回到OnCreate方法,透過FindViewById找到layout當中所設立的畫面元件,如綠色框所示。

3-12


加入signButton的Click事件所要處理跟AzureAD互動的程式,並且當登入完成後顯示資訊到messageTextView當中,如綠色框所示。

3-13

加入signoutButton的Click事件所要處理跟AzureAD互動的程式,並且登出完成後顯示資訊到messageTextView當中,如綠色框所示。

3-14

完成啦!!!

執行該Xamarin.Android App來實驗看看~~

點選SignOn,接著會跳出AzureAD的登入頁面,鍵入之前所設立好的帳號(含網域)密碼,並且點選登入。

imageimage

完成後,會看到messgeTextView會顯示我們之前在AzureAD上所建立的帳號資料: AzureAD Demo。

最後在按下SignOut按鈕,登出。

imageimage

以上,我們就確保了App可以跟AzureAD連結。

BTW,如果你要撰寫的是Xamarin.Forms的部分請參考maduka的技術日記當中的:
使用Xamarin.Forms達成Azure AD的帳號驗證:
https://dotblogs.com.tw/maduka/2016/05/14/201533

下一篇,我們就要再繼續跟透過AzureAD跟後面的WebAPI互動了!!!

敬請期待~~

沒有留言:

張貼留言