0

我正在尝试使用 AAD B2C 在我的 Xamarin.Forms 应用程序中设置刷新令牌。我已经设置好了所有东西,但是在调用LoginAsync我的MobileServiceClient. 我可以找到的所有文档和示例都显示将我的LoginAsync方法更新为:

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

除了第二个参数MobileServiceClient不采用 a之外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";到我的有效负载一样简单?

4

1 回答 1

0

AFAIK,移动应用程序支持两种身份验证流程(客户端管理的流程服务器管理的流程)。

客户端管理的身份验证

您的应用程序可以独立联系身份提供者,然后在使用您的后端登录时提供返回的令牌。此客户端流程使您能够为用户提供单点登录体验或从身份提供者检索其他用户数据。

检索令牌后,您将通过将令牌传递到JObject实例中,使用 azure 移动后端登录,如下所示:

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

有关通过客户端流身份验证的其他身份提供者的更多详细信息,您可以参考Client-managed authentication

服务器管理的身份验证

您的应用直接联系您的移动后端,然后您的 azure 移动后端联系身份提供者并为您提供已登录的用户。

  • 对于 Xamarin.Forms UWP 应用,您可以按如下方式登录:

在此处输入图像描述

  • 对于 Xamarin.Forms IOS 应用程序,您可以按如下方式登录:在此处输入图像描述

有关 Xamarin.Forms 中服务器管理的身份验证的更多详细信息,您可以参阅向Xamarin Forms 应用添加身份验证

更新:

我已经检查过,如果您拨打MobileServiceClient.LoginAsyncPCL,您将看不到任何LoginAsync. 如您所见,每个平台都有许多扩展LoginAsync方法。Microsoft.WindowsAzure.Mobile.Ext.dll您需要定义IAuthenticate接口并在您的每个应用程序(uwp、android、ios 等)中实现它,有关更多详细信息,您可以参考此处

于 2017-06-07T07:46:31.790 回答