如何在 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?