使用Azure EasyTables进行身份验证-Azure ActiveDirectory

使用Azure EasyTables进行身份验证-Azure ActiveDirectory,azure,xamarin.forms,azure-web-app-service,forms-authentication,azure-mobile-services,Azure,Xamarin.forms,Azure Web App Service,Forms Authentication,Azure Mobile Services,我已经尝试对Azure应用程序服务的请求进行身份验证一段时间了,我完全被难住了,我似乎无法让Microsoft.Azure.Mobile.Client接受并成功地对已知的“良好”令牌进行身份验证 总的来说,我想要的是能够成功地在Xamarin表单中启动web浏览器,使用Azure、Google或其他社交身份验证对用户进行身份验证,然后使用令牌对Azure应用程序服务(EasyTables)进行身份验证,我已经运行了该服务,但没有启用身份验证。出于某种原因,我所找到的任何资源都没有提供一个明确的方

我已经尝试对Azure应用程序服务的请求进行身份验证一段时间了,我完全被难住了,我似乎无法让Microsoft.Azure.Mobile.Client接受并成功地对已知的“良好”令牌进行身份验证

总的来说,我想要的是能够成功地在Xamarin表单中启动web浏览器,使用Azure、Google或其他社交身份验证对用户进行身份验证,然后使用令牌对Azure应用程序服务(EasyTables)进行身份验证,我已经运行了该服务,但没有启用身份验证。出于某种原因,我所找到的任何资源都没有提供一个明确的方法来做到这一点,如果有任何帮助,我将不胜感激

以下是我到目前为止的主要配置:

  • 我有一个应用程序成功地读取数据表并将其保存到Azure托管EasyTables实现中。使用标准格式读取(和写入)表格:
  • var locations=(等待App.MobileService.GetTable().ToListAsync());
    
    MobileServiceClient在App.xaml.cs文件中实例化如下:

    公共静态MobileServiceClient MobileService=新的MobileServiceClient(“https://mywebapp.azurewebsites.net");
    
    正如我上面所说的,当访问和保存在线服务时,这种方法可以很好地工作

  • 转到Azure门户,我已经在设置-->身份验证/授权下激活了“应用服务身份验证”,并且还设置了Azure Active Directory身份验证提供程序。在此提供程序下,我已设置Azure Active Directory实例的客户端ID(在管理-->应用程序注册下)

  • 回到Xamarin,我已经成功地使用Steven Thewissen的方法对此进行了验证。特别是,我创建了一个“MSAuthService”助手,它成功地启动了一个web浏览器,允许您使用Microsoft凭据登录,然后它可以从Microsoft Graph检索您的帐户名和其他内容,包括访问令牌

  • 我现在正尝试使用此访问令牌登录到我用来访问EasyTables的MobileService,方法如下:

  • JObject auth_token_JObject=new JObject();
    auth_token_jobject[“authenticationToken”]=令牌;
    var输出=等待App.MobileService.LoginAsync(
    MobileServiceAuthenticationProvider.MicrosoftAccount,
    授权令牌(作业对象);
    
    然而,每当我这样做,我仍然会得到一个“未经授权”的错误,由上面的最后一行生成

    我理解其他人(例如,似乎也有同样的问题,但在该职位上没有解决方案

    我尝试过的其他事情,但没有完全成功。如上所述,通过Microsoft Graph而不是我的web服务成功进行身份验证,我得到的最接近的方法是上面的过程:

  • EasyTables等授权概述-尽管这似乎没有为Xamarin提供任何明确的代码进行身份验证
  • 最新Xamarin博客和解释材料(而且,尽管使用
    的过程等待WebAuthenticator.AuthenticateTasync
    方法似乎比我上面使用的示例简单得多,但似乎没有提供有关如何生成调用身份验证页面所需的URI的任何详细信息,也没有提供如何实现它的分步指南。无论是哪种方式,我都有没办法让它工作
  • 如果有人有一个简单的方法获得一个有效的令牌,然后将其提供给MobileService客户端,我将不胜感激。我想这就像从上面的Xamarin Essentials WebAuthenticator调用令牌一样简单,然后通过
    var output=wait App.MobileService.LoginAsync传递它(MobileServiceAuthenticationProvider.MicrosoftAccount,auth_token_jobject)
    但到目前为止,我似乎无法让它正常工作

    非常感谢


    奥利弗。

    这里有几个问题(重读几遍)

  • 您使用的是
    MobileServiceAuthenticationProvider.MicrosoftAccount
    -您应该使用“aad”
  • AAD需要访问令牌-有关需要提供什么的详细信息,请参阅
  • 如果您得到的令牌确实是MSA令牌,那么您仍然需要提供access_令牌字段(而不是authenticationToken字段)

    如果您不需要任何特殊功能,您应该可以像这样使用.login():

    await App.MobileService.LoginAsync("aad", "your-method");
    

    有关这方面的更多详细信息,请参阅authentica中的一个

    嗨,你看了吗,它是否有用?你看了书中关于身份验证的章节了吗?-第2章明确地介绍了这种情况。此外,如果你使用弹出窗口,你不应该使用WebAuthenticator-它已经在为你这样做了。