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

本文关键字:获取 用户 信息 应用程序 Azure 移动 Web | 更新日期: 2023-09-27 18:19:26

我有一个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始终为null。

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

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

提前感谢!

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

注释太长

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

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

我相信这就是你遇到的问题。快速搜索一下这个问题,你就会发现这个SO问题。

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

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

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

好吧,我不知道这真的有帮助吗,但我会试试的。据我所知,你使用的是asp.net身份和facebook中间件。我也使用这个,但使用谷歌oauth中间件而不是facebook。如果我是对的,这应该是的解决方案

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

希望对有所帮助