在AAD B2C中使用Azure App Service和Xamarin.Forms中的刷新令牌

时间:2017-06-06 22:49:37

标签: xamarin.forms azure-mobile-services azure-ad-b2c refresh-token

我试图使用AAD B2C在我的Xamarin.Forms应用中设置刷新令牌。我已经设置了所有内容但在LoginAsync上调用MobileServiceClient时遇到了问题。我可以找到的所有docs和示例都显示更新我的LoginAsync方法:

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";一样简单吗?

1 个答案:

答案 0 :(得分:-1)

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

客户端管理的身份验证

  

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

在您检索到令牌后,您将使用您的azure移动后端登录,方法是将令牌传递到JObject实例,如下所示:

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

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

服务器管理的身份验证

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

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

enter image description here

  • 对于Xamarin.Forms IOS应用,您可以按如下方式登录:enter image description here

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

<强>更新

我已经检查过,如果您在PCL中致电MobileServiceClient.LoginAsync,则无法看到LoginAsync的任何扩展程序。如您所见,每个平台的LoginAsync都有许多扩展Microsoft.WindowsAzure.Mobile.Ext.dll方法。您需要定义IAuthenticate接口并在每个应用程序(uwp,android,ios等)中实现它,有关详细信息,请参阅here