如何在 Azure 移动 Web 应用中获取基本用户信息?

Posted

技术标签:

【中文标题】如何在 Azure 移动 Web 应用中获取基本用户信息?【英文标题】:How to get basic user information in an Azure Mobile Web App? 【发布时间】: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 移动应用程序的新方式,而不是旧的经典方式。

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

提前致谢!

【问题讨论】:

我不知道它是否能帮助你,但我觉得它可以:azurefromthetrenches.com/… 或 blogs.msdn.com/b/carlosfigueira/archive/2012/10/25/… 或 ***.com/questions/25463125/… 。我希望他们能推动您找到解决方案。祝你好运。 感谢我的朋友,我阅读了几个文档,包括这些文档,但它们并没有帮助解决我的问题。 不客气。我很遗憾他们没有帮助你,祝你好运。 @Tom 你也应该看看这个details article(如果你还没有)。问题中可能有很多事情尚不清楚。就像在服务器端一样,它应该是 MobileServiceUser。 ***.com/questions/32569643/… 【参考方案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 实例

希望有帮助

【讨论】:

以上是关于如何在 Azure 移动 Web 应用中获取基本用户信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 移动应用中将 Azure AD 用户登录到 Firebase?

如何在 iOS 的 Azure 移动应用通知中心注册目标推送通知

在 Azure Web 应用程序中使用重写规则获取权限错误

微软云服务Azure所有产品简介

微软云服务Azure所有产品简介

如何防止 HttpWebRequest 长时间响应超时 Azure Web App