2017-04-16 61 views
0

我想添加/安裝Microsoft.Azure.Mobile.Server.Authentication到我的PCL項目,但有一個錯誤說無法Microsoft.Azure.Mobile.Server.Authentication安裝到Xamarin窗體

無法安裝軟件包'Microsoft.Azure.Mobile.Server 2.0.0'。您正在嘗試將此程序包安裝到以'.NETPortable,Version = v4.5,Profile = Profile49'爲目標的項目中,但該程序包不包含任何與該框架兼容的程序集引用或內容文件。

我試過安裝以前的版本,但是出現了完全相同的錯誤。我也嘗試將Framework版本更改爲.NET 4.6,但出現了其他錯誤。

我想使用只有該名稱空間支持的GetAppServiceIdentityAsync()方法。有沒有其他方法可以將該引用添加到我的PCL項目中?

+0

該API用於基於服務器的服務。僅供參考:使用類似於「GetAppServiceIdentityAsync ...'在移動應用程序中會導致Facebook ToS違例,因爲包括Facebook授權將是一個安全問題,因爲任何人都可以反彙編應用程序並獲得服務器憑據。這可以也適用於其他提供商的ToS,您需要查看他們的API ToS。 – SushiHangover

+0

你好@SushiHangover。我不知道這會違反任何ToS。我想用這個API,因爲我把Adrian Hall的這個很棒的[post](https://adrianhall.github.io/develop-mobile-apps-with-csharp-and-azure/chapter2/authorization/)稱爲我們可以使用該API從提供商那裏獲得額外的信息。 – hamdanjz4

回答

1

Azure移動應用程序有兩個版本 - 一個在服務器上運行,另一個在客戶端運行。您正嘗試使用服務器版本,並且需要ASP.NET和.NET Framework 4.5+(目前爲4.6)。它不會在你的客戶端工作。

如果您在服務器上使用Azure移動應用程序,則您已經向Microsoft.Azure.Mobile.Client添加了引用,併爲您的Azure App Service創建了移動客戶端引用。您還已經配置了Azure移動應用程序服務器並使用Azure應用程序服務身份驗證鏈接了您的身份驗證提供程序。如果你還沒有,請查看書http://aka.ms/zumobook - 這會給你正確的指導。

如果您還在我身邊,您需要與Azure應用服務URL進行HTTPS連接+ /.auth/me - 這會返回一個JSON blob,其中包含Azure應用服務認證所瞭解的提供商信息。服務知道的一件事是用於認證的認證令牌。然後,您可以使用此身份驗證令牌獲取有關用戶的其他信息(如果該用戶不在JSON blob中)。

獲得該信息的好方法是使用如Bruce提到的client.InvokeApiAsync<>()方法。這本書也包含在內。

+0

謝謝@ adrian-hall對您使用的詳細解釋。我不知道它應該在服務器版本中使用。在我發佈這個問題之前,我已經實現了你的'client.InvokeApiSync <>()',正如你在書中提到的那樣。我只是對GetAppServiceIdentityAsync()如何獲得更詳細的聲明感到好奇。 – hamdanjz4

+0

嗯,您在提示部分的書中提到: '您可以使用AccessToken屬性爲自定義API中的大多數提供程序執行Graph API查找。我們將在後面的章節中更深入地討論這個問題。「 我正在尋找解釋該用法的那一章,但我找不到一個。它到底在哪裏? – hamdanjz4

+0

只需使用訪問令牌對auth提供程序執行Graph API查找。您不需要自定義API。您的移動客戶端可以自己完成圖形API調用。定製API在第4章中介紹。 –

0

您是否嘗試將Android API級別設置爲更高級別?通過安裝Moq,我遇到了這個錯誤,我可以通過將Android API級別更改爲最高API級別來解決此問題。請嘗試使用帶API-Level 25的Android 7.1(Nougat),也是最低版本的SDK。

你可以改變它:右鍵單擊項目 - >選項 - >構建 - >常規 - > Android應用程序

在常規下,你也可以嘗試改變目標版本的應用向更高層次發展。

+0

我已將Android API Level設置爲使用API​​ Level 25作爲Target Framework。我剛剛閱讀這[後](http://stackoverflow.com/questions/34882495/reference-azure-mobile-net-server-sdk-nuget-in-pcl-so-i-can-have-models-in- pcl),我認爲這不是關於android API的東西。我認爲這是因爲該軟件包只支持.NET 4.5 ..它會給使用.NET Portable的PCL帶來錯誤?雖然我不知道。無論如何謝謝你的回答 – hamdanjz4

2

正如我知道,GetAppServiceIdentityAsync用於檢索IdentityProviderCredentials)爲您的服務器端代碼的特定供應商。對於您的移動客戶端,我假定您可以利用MobileServiceClient.InvokeApiAsync<List<AppServiceIdentity>>("/.auth/me");來檢索身份並使用特定供應商對其進行過濾,他們可以根據您的預期獲得Provider,UserIdUserClaims屬性。有關更多詳細信息,請參閱Obtaining User Claims

+0

是的,我已經實現該功能來獲得UserClaims。我只是對'GetAppServiceIdentityAsync'的用法感到好奇,它是否可以用來從提供者那裏獲得更詳細的信息。謝謝。 – hamdanjz4