-1

我试图在使用AAD B2C的Xamarin.Forms应用程序中设置一个刷新令牌。当我拨打我的MobileServiceClient上的LoginAsync时,我已经设置了一切,但遇到问题。所有的docs和例子我能找到演出来更新我的LoginAsync方法是:在AAD B2C中使用刷新令牌与Azure App Service和Xamarin.Forms

var user = await App.MobileServiceClient.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, 
    new Dictionary<string, string>() { { "response_type", "code id_token" } }); 

除将MobileServiceClient不采取Dictionary<string, string>第二个参数。这需要JObject。这里是我当前的代码是什么样子:

var authResult = await App.AuthenticationClient.AcquireTokenAsync(Constants.Scopes, "", UiOptions.SelectAccount, string.Empty, null, Constants.Authority, Constants.Policy); 

var payload = new JObject(); 
payload["access_token"] = authResult.Token; 

var user = await App.MobileServiceClient.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, payload); 

我无法找到一个例子使用JObject任何地方。
这与将payload["response_type"] = "code id_token";添加到我的有效载荷一样简单?

+0

你解决了这个问题吗,你需要进一步的帮助吗? –

回答

-1

AFAIK,移动应用程序支持两种验证流程(client-managed flowserver-managed flow)。

客户端管理的认证

您的应用程序可以独立联系身份提供程序,然后在登录时提供返回的标记与后端。通过此客户端流程,您可以为用户提供单一登录体验或从身份提供商检索其他用户数据。您检索到的令牌

后,那么你将与你的蔚蓝行动后端通过传送令牌到JObject实例如下登录:

JObject payload = new JObject(); 
payload["access_token"] = ar.AccessToken; 
var user = await client.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, payload); 

有关其他标识提供者通过客户端流量的详细信息认证,你可以参考Client-managed authentication

服务器管理的认证

您的应用程序直接接触行动后端,那么你的蔚蓝行动后端接触身份提供商,并提供你的登录用户。

  • 对于Xamarin.Forms UWP的应用程序,你可以登录如下:

enter image description here

  • 对于Xamarin.Forms IOS应用程序,你可以登录如下:enter image description here

有关Xamarin.Forms中服务器管理的身份验证的更多详细信息,请参阅Add authentication to your Xamarin Forms app

UPDATE:

我已签,如果您在PCL叫MobileServiceClient.LoginAsync,你看不到任何扩展LoginAsync。如您所见,Microsoft.WindowsAzure.Mobile.Ext.dll中的每个平台都有很多扩展LoginAsync方法。您需要定义IAuthenticate接口并在您的每个应用程序(uwp,android,ios等)中实现它,以获取更多详细信息,请参阅here

+0

那些来自你的现场项目的截图?因为我的Microsoft.Azure.Mobile.Client版本是'portable-win + net45 + wp8 + wpa81 + monotouch + monoandroid \ Microsoft.WindowsAzure.Mobile.dll',这是NuGet的最新完整版本。它没有LoginAsync()和Dictionary参数。 – Marcus

+1

它看起来像服务器和客户端流程的唯一区别在于客户端流程使用'AcquireTokenAsync()'方法中的令牌并将其传递到'LoginAsync()'方法的'payload'中。 – Marcus

+0

根据你的评论,我假设你在你的PCL中调用了“MobileServiceClient.LoginAsync”。正如你所看到的,在每个平台的'Microsoft.WindowsAzure.Mobile.Ext.dll'中有许多扩展'LoginAsync'方法。您需要定义'IAuthenticate'接口并在您的每个应用程序(uwp,android,ios等)中实现它,以获取更多详细信息,请参阅[此处](https://docs.microsoft.com/zh-cn/ -us /天蓝色/应用服务,移动/应用服务,移动xamarin表单-GET-开始用户#添加认证到的便携类库)。 –

相关问题