3

我已經確保了我的API應用程序,並且已成功通過示例應用程序測試了我的ADB2C流程:https://github.com/Azure-Samples/active-directory-b2c-xamarin-native。使用該結構,我可以觸發登錄過程,然後訪問受保護的API調用。如何整合新的AD B2C和C#Azure Mobile Client lib?

但是我也想使用WindowsAzure.Mobile sdk作爲方便。在這裏暗示:https://cgillum.tech/2016/08/10/app-service-auth-and-azure-ad-b2c-part-2/,您可以從該類中的LoginAsync觸發B2C流程,但當我以這種方式調用它時,它什麼也不做。

我還發現https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-dotnet-how-to-use-client-library/(滾動到「使用Active Directory認證庫進行用戶認證」),我用MSAL調用獲取令牌。這觸發了登錄流程,我獲得了良好的令牌,並聲稱回來,然後我把它放在一些JSON,並通過它像這樣:

AuthenticationResult ar = await App.PCApplication.AcquireTokenSilentAsync(App.Scopes, "", App.Authority, App.SignUpSignInpolicy, false); 
JObject payload = new JObject(); 
payload["access_token"] = ar.AccessToken; 
user = await App.MobileService.LoginAsync(
MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, payload); 

這次調用LoginAsync拋出

{Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException: You do not have permission to view this directory or page. at Microsoft.WindowsAzure.MobileServices.MobileServiceHttpClient+<ThrowInvalidResponse>d__18.MoveNext() [0x0022f] in <filename unknown>:0 --- End of stack trace from previous location where exception was thrown --- (snip)

它們不是爲了一起工作而設計的嗎?那些不同種類的代幣?我使用B2C的原因是因爲我真的不想知道所有那些OAUTH的東西:)

+1

你能分享那個不起作用的LoginAsync呼叫嗎?當你說它什麼都不做時,webview是否出現? – mattchenderson

+0

所以調用的MSAL版本彈出webview,該部分工作正常。 LoginAsync的調用與上面的示例代碼相同。但是,LoginAsync的這個調用從不顯示任何它只是默默返回或崩潰的東西。 'JObject payload = new JObject(); payload [「authenticationToken」] = ar.IdToken; var user = await mc.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory,payload);' –

回答

3

在B2C的情況下,您實際上取回ID令牌而不是訪問令牌,我相信ar.AccessToken屬性將爲空。該屬性似乎也會在最新版本的MSAL中消失。

我懷疑你只需要將有效載荷更新爲「authenticationToken」,而不是使用ar.IdToken

我不確定您是否可以繼續在有效負載中使用「access_token」鍵,但它可能是您可以的。如果不是,請嘗試使用「authenticationToken」。

+0

嗨馬特,感謝您的幫助。我嘗試使用「authenticationToken」以及ar.IdToken(與ar.Token的值相同)中的「authenticationToken」,並在Azure客戶端庫的內部產生JSON解析異常: Microsoft.WindowsAzure .MobileServices.MobileServiceAuthentication + d__25.MoveNext()[0x0007b] in :0 這對我來說是不透明的。 所以我覺得我的旅行已經完成了一會兒。如果你有更多的想法 - 我會很樂意嘗試! –