我试图使用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";
一样简单吗?
答案 0 :(得分:-1)
AFAIK,移动应用支持两种身份验证流程(client-managed flow和server-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中服务器管理的身份验证的更多详细信息,请参阅Add authentication to your Xamarin Forms app。
<强>更新强>
我已经检查过,如果您在PCL中致电MobileServiceClient.LoginAsync
,则无法看到LoginAsync
的任何扩展程序。如您所见,每个平台的LoginAsync
都有许多扩展Microsoft.WindowsAzure.Mobile.Ext.dll
方法。您需要定义IAuthenticate
接口并在每个应用程序(uwp,android,ios等)中实现它,有关详细信息,请参阅here。