Active directory 使用Azure移动应用程序和Xamarin的自定义API控制器进行身份验证

Active directory 使用Azure移动应用程序和Xamarin的自定义API控制器进行身份验证,active-directory,xamarin.ios,uwp,azure-mobile-services,windows-10-iot-core,Active Directory,Xamarin.ios,Uwp,Azure Mobile Services,Windows 10 Iot Core,我已经用Azure创建了一个移动应用程序服务。我创建了一个新的自定义控制器,如下所示 [MobileAppController] 公共类新闻控制器:ApiController { 公共服务{get;set;} //获取api/新闻 公共异步任务Get() {//返回一些数据} } 在Azure中,我已启用身份验证并将选项设置为Active Directory,如下所示 我正在尝试在Xamarin iOS应用程序中使用API 我通过Active Directory创建了一个访问令牌,如下所示,

我已经用Azure创建了一个移动应用程序服务。我创建了一个新的自定义控制器,如下所示

[MobileAppController]
公共类新闻控制器:ApiController
{
公共服务{get;set;}
//获取api/新闻
公共异步任务Get()
{//返回一些数据}
}
在Azure中,我已启用身份验证并将选项设置为Active Directory,如下所示

我正在尝试在Xamarin iOS应用程序中使用API

我通过Active Directory创建了一个访问令牌,如下所示,这可以正常工作并正确生成令牌

公共静态类ServicePrincipal
{
静态字符串权限=”https://login.microsoftonline.com/xxx";
静态字符串clientId=“xxx”;
静态字符串clientSecret=“xx”;
静态字符串resource=“xx”;
公共静态异步任务GetS2SAccessTokenForProdMSA()
{
return wait GetS2SAccessToken();
}
静态异步任务GetS2SAccessToken()
{
尝试
{
adalinializer.Initialize();
var clientCredential=新的clientCredential(clientId,clientSecret);
var context=newauthenticationcontext(authority,false);
var authenticationResult=await context.AcquireTokenAsync(
资源,,
客户凭证);
返回authenticationResult;
}
捕获(例外情况除外)
{
投掷;
}
}
}
然而,当尝试使用API时,我总是会遇到未经授权的异常

我已经尝试通过像这样将令牌传递给自定义API来进行身份验证。这会引发未经授权的异常

var-client=新的MobileServiceClient(“URL”);
var authenticationResult=await ServicePrincipal.GetS2SAccessTokenForProdMSA();
var authHeader=新字典{“承载者”,authenticationResult.AccessToken};
var orderResult=await client.InvokeApiAsync(“News”,HttpMethod.Get,authHeader);
我还尝试了以下方法,但也不起作用

CurrentPlatform.Init();
var client=新的MobileServiceClient(“URL”);
var authenticationResult=await ServicePrincipal.GetS2SAccessTokenForProdMSA();
JObject有效负载=新JObject();
有效负载[“访问令牌”]=authenticationResult.AccessToken;
等待client.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory,有效负载);

您是否可以在此处看到任何问题,如何传递授权令牌?

我建议在Azure门户中启用应用程序日志记录,然后查看身份验证错误是什么。

以下是有关如何添加日志记录的教程: