【问题标题】:How to get basic user information in an Azure Mobile Web App?如何在 Azure 移动 Web 应用中获取基本用户信息?
【发布时间】:2015-10-26 12:48:51
【问题描述】:

我有一个 Xamarin.Forms 应用程序,我想实现其基于 FaceBook 和 Azure 的身份验证功能。身份验证本身有效,但我还没有找到从中获取基本用户信息的方法(姓名、电子邮件...)

var user = await DependencyService.Get<IMobileClient>()
            .LoginAsync(MobileServiceAuthenticationProvider.Facebook);

在服务器端

 var mobileAppUser = (MobileAppUser)User;
 var facebookCredentials = 
     user.GetIdentityAsync<FacebookCredentials>().Result;

mobileAppUser 存在,但 facebookCredentials 始终为空。

我在 Azure 上的后端是一个用 .net 编写的新移动 Web 应用。它的所有功能都很好用,除了这个身份验证问题。我找不到在服务器端或客户端解决此问题的正确方法。请。请注意,我的问题是关于 Azure 移动应用程序的新方式,而不是旧的经典方式。

你愿意帮我吗?欢迎任何示例代码或文档。

提前致谢!

【问题讨论】:

标签: c# .net facebook azure mobile


【解决方案1】:

评论太长了

如果您查看GetIdentityAsync 的实现,您将看到以下内容:

  • 它检查用户是否经过身份验证(您说用户经过身份验证所以这里没有问题)
  • 从配置中读取"EMA_RuntimeUrl"(它不为空,因为那样你会得到一个异常)
  • 它检查来自提供者的令牌是否有效。如果不是,则返回null

我相信这是您遇到的问题。快速搜索此问题会将您带到this SO 问题。

那么您是否在应用程序属性中的 Azure 门户中的移动应用程序中手动创建了 EMA_RuntimeUrl,并分配给网关地址?

【讨论】:

  • 谢谢!当我在 Azure 中创建应用程序时,会自动创建 EMA_RuntimeUrl 设置。我没有改变任何东西。它的值是网关 url,当在浏览器中打开这个 url 时,它会显示“网关已启动”。
  • 所以,我觉得这个设置还可以,我的问题依旧存在。
  • 这绝对是配置问题。你的代码是正确的。因此,如果没有任何额外的信息,就很难说什么。 This 迁移帮助提到“将网关的 /signin-* 端点添加为每个提供程序的附加重定向 URI”。并且有一个 [AZURE.NOTE],它也可能适用于 Facebook。
【解决方案2】:

使用异步调用,您应该等待操作完成,完成后结果将可用。您可以通过多种方式做到这一点,但在这种情况下,最自然的方式是:

var facebookCredentials = await user.GetIdentityAsync<FacebookCredentials>();
// Here you can use your facebookCredentials variable:

【讨论】:

  • 等待任务的结果也等待完成。
  • 是的,你是对的。还是值得一试的。永远不知道实现细节。
  • 非常感谢,我之前也试过了,和其他一些琐碎的事情一样。
  • 好的,那我要删除这个答案来减少噪音。
【解决方案3】:

好吧,我不知道这是否真的有帮助,但我会尝试的。据我了解,您为此使用了带有 facebook 中间件的 asp.net 身份。我也使用它,但使用 google oauth 中间件而不是 facebook。如果我是对的,这应该是解决方案

如果是这样,当您使用中间件发出身份验证请求时,您指定了回调 url,在与您的提供商 (facebook) 成功进行身份验证后,您将被重定向。要请求外部身份验证,您调用 ChallangeResult 并指定此 url。当您到达此回调时,您可以使用来自IAuhtnticationManager 接口的GetExternalLoginInfoAsync() 方法作为回调方法的第一步。要获取 IAuthenticationManager 实例,您可以阅读 HttpContext.GetOwinContext().Authentication 属性。在此之后,您可以获得有关用户的所有必要信息,如 IIdentity 实现 - GetExternalLoginInfoAsync() 返回 ExternalIdentity 实例

希望有帮助

【讨论】:

    猜你喜欢
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多