我正在使用Azure移动服务向我的Windows应用商店应用添加身份验证。通过移动服务文档中的this文章,我可以获得UserId以及MobileServiceAuthenticationToken
(适用于Google和Microsoft帐户)
我的问题是如何在name, email Id
后端移动服务中使用MobileServiceAuthenticationToken
获取.NET
等用户信息。我已经阅读了各种文章,解释了如何在Javascript
后端移动服务中完成此操作,但在C# + .NET
后端移动服务中找不到任何正确实现的内容。
任何指示赞赏。
谢谢
答案 0 :(得分:7)
Facebook,Google在授权时不会返回您的用户个人资料名称,电子邮件。他们正在为您提供access token
,可用于将来的请求。
您需要使用name, email
向MobileServiceAuthenticationToken
申请Facebook Graph API。
您可以使用此库访问Facebook API: https://facebookgraphapi.codeplex.com/
// MobileServiceAuthenticationToken <- your token
var facebook = new FacebookGraphAPI(MobileServiceAuthenticationToken);
// Get user profile data
var user = facebook.GetObject("me", null);
Console.WriteLine(user["name"]);
答案 1 :(得分:3)
使用来自.Net Backend Azure Mobile Service的身份验证令牌获取用户信息:
public class UserInfoController:ApiController { public ApiServices Services {get;组; }
[AuthorizeLevel(AuthorizationLevel.User)]
public async Task<JObject> GetUserInfo()
{
//Get the current logged in user
ServiceUser user = this.User as ServiceUser;
if (user == null)
{
throw new InvalidOperationException("This can only be called by authenticated clients");
}
//Get Identity Information for the current logged in user
var identities = await user.GetIdentitiesAsync();
var result = new JObject();
//Check if the user has logged in using Facebook as Identity provider
var fb = identities.OfType<FacebookCredentials>().FirstOrDefault();
if (fb != null)
{
var accessToken = fb.AccessToken;
result.Add("facebook", await GetProviderInfo("https://graph.facebook.com/me?access_token=" + accessToken));
}
//Check if the user has logged in using Microsoft Identity provider
var ms = identities.OfType<MicrosoftAccountCredentials>().FirstOrDefault();
if (ms != null)
{
var accessToken = ms.AccessToken;
result.Add("microsoft", await GetProviderInfo("https://apis.live.net/v5.0/me/?method=GET&access_token=" + accessToken));
}
//Check if the user has logged in using Google as Identity provider
var google = identities.OfType<GoogleCredentials>().FirstOrDefault();
if (google != null)
{
var accessToken = google.AccessToken;
result.Add("google", await GetProviderInfo("https://www.googleapis.com/oauth2/v1/userinfo?access_token=" + accessToken));
}
return result;
}
private async Task<JToken> GetProviderInfo(string url)
{
var c = new HttpClient();
var resp = await c.GetAsync(url);
resp.EnsureSuccessStatusCode();
return JToken.Parse(await resp.Content.ReadAsStringAsync());
}
}
完成后发布移动服务。上面的代码获取当前登录用户的身份信息,然后根据用户选择的身份验证提供程序(Microsoft,Facebook或Google),它会调用该身份提供者的用户配置文件API并获取用户信息。
var user = await App.MobileService.LoginAsync(MobileServiceAuthenticationProvider.MicrosoftAccount); var userInfo = await App.MobileService.InvokeApiAsync("userInfo", HttpMethod.Get, null);
但是,如果您的应用程序需要的数量超过可以在登录期间请求其他范围,则只会带来一些基本用户信息,例如名称,性别等,方法是在Azure服务中的移动服务配置选项卡中设置MS_FacebookScope和MS_MicrosoftScope应用程序设置
获取有关此内容的详细信息