如何从asp.net核心中的Microsoft帐户获取外部登录配置文件图片

Nik*_*ias 5 asp.net

如何使用Microsoft.AspNetCore.Authentication.Facebook库从Microsoft帐户获取个人资料图片?我尝试使用声明,但他们没有配置文件图片值...我也尝试通过检查图片网址查看帐户的源代码控制,但我注意到网址是由一些我无法索赔的参数组成的,所以我无法像Facebook一样构建网址...有人可以帮助我吗?

sje*_*sje 3

您可以使用 Microsoft Graph 从 Microsoft 帐户获取个人资料图片: https://developer.microsoft.com/en-us/graph/quick-start

关于如何请求个人资料图片的具体说明: https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/profilephoto_get

如果您按照快速入门操作(选择 asp.net,单击“获取应用程序 ID 和密钥”并下载示例代码),则可以轻松获取数据,如下所示:

GraphServiceClient graphClient = SDKHelper.GetAuthenticatedClient();

var photoStream = await graphService.GetCurrentUserPhotoStreamAsync(graphClient);
Run Code Online (Sandbox Code Playgroud)

编辑:抱歉,忘记了 asp.net core 部分(Microsoft.Identity.Client 似乎不适用于 asp.net core)。

在ExternalLoginCallback中,您可以从var info = wait _signInManager.GetExternalLoginInfoAsync();返回的ExternalLoginInfo对象获取访问令牌。请记住在配置身份验证时将 SaveTokens 设置为 true(否则访问令牌将不可用):

services.AddAuthentication()
    .AddMicrosoftAccount(options =>
    {
        options.ClientId = Configuration["ExternalProviders:Microsoft:ClientId"];
        options.ClientSecret = Configuration["ExternalProviders:Microsoft:ClientSecret"];
        options.SaveTokens = true;
        ...
Run Code Online (Sandbox Code Playgroud)

然后只需发出一个 http 请求 - 如下所示:

var httpClient = new HttpClient();
httpClient.SetBearerToken(info.AuthenticationTokens.Where(t => t.Name.Equals("access_token")).First().Value);
var pictureResult = httpClient.GetAsync("https://graph.microsoft.com/v1.0/me/photo/$value").Result;
Run Code Online (Sandbox Code Playgroud)