.NET Core 2 Facebook访问令牌

时间:2018-07-09 15:45:19

标签: c# facebook-graph-api .net-core-2.0

我想从C#中的facebook获取访问令牌。 我在Core 2中找不到执行此操作的任何代码。 我正在使用.Net Core 2 MVC。 在我的startup.cs中,我正在使用以下代码:

services.AddAuthentication()
            .AddFacebook((o) =>
            {
                o.AppId = Configuration["Authentication:Facebook:AppId"];
                o.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
                o.SaveTokens = true;
                o.Scope.Add("email");
                o.Scope.Add("user_birthday");
                o.Scope.Add("user_gender");
                o.Scope.Add("user_posts");
                o.Scope.Add("manage_pages");
                o.Scope.Add("publish_pages");
            });

在我的控制器中,我尝试获取令牌,但是我又得到了“ null”。

控制器:

[Authorize]
        public async Task<IActionResult> Test()
        {  
            var accessToken = await HttpContext.GetTokenAsync("access_token");

            return Json(new KeyValuePair<string, object>("access_token", accessToken));
        }

是否有任何优雅的方法来获取访问令牌?

1 个答案:

答案 0 :(得分:0)

Startup.cs

services.AddAuthentication(options =>
 {
     options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
     options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
     options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;

  })
 .AddJwtBearer(options =>
 {
     options.TokenValidationParameters = tokenValidationParameters;

 })
 .AddFacebook(facebookOptions =>
 {
     facebookOptions.AppId = "";
     facebookOptions.AppSecret = "";
     facebookOptions.SaveTokens = true;
     facebookOptions.Scope.Add("email");
     facebookOptions.Scope.Add("user_birthday");
     facebookOptions.Scope.Add("user_gender");
     facebookOptions.Scope.Add("user_posts");
     facebookOptions.Scope.Add("manage_pages");
     facebookOptions.Scope.Add("publish_pages");
 })
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme);

控制器

var result = await HttpContext.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme);
result.Properties.GetTokenValue("access_token");