2016-10-05 67 views
0

我想在賬戶控制器的接收在.NET MVC核心外部登錄

public async Task<IActionResult> ExternalLoginCallback(string returnUrl = null, string remoteError = null) 

方法成功驗證後收到有關用戶的詳細信息與Facebook後,Facebook的ACCESS_TOKEN圖形API。

我怎樣才能夠接收Facebook的access_token,以便我可以使用圖形API?我想我可能會錯過一些明顯的東西,但不幸的是找不到我所缺少的東西。

非常感謝您的幫助!

回答

1

在選項中將SaveTokens設置爲true。

var facebookOptions = new FacebookOptions 
{ 
     AppId = "", 
     AppSecret = "", 
     SaveTokens = true, 
     ...   
}; 

app.UseFacebookAuthentication(facebookOptions); 

,並得到它:

HttpContext.Authentication.GetTokenAsync("access_token"); 

記住使用GetTokenAsync你需要添加using Microsoft.AspNetCore.Authentication;

+0

非常感謝您的回答Adem。現在將SaveTokens = true添加到Facebook選項,現在可以在var info = await _signInManager.GetExternalLoginInfoAsync()中使用access_token; – Nik

+0

但不幸的是HttpContext.Authentication.GetTokenAsync(「access_token」);沒有工作.. – Nik

+0

我試過它與cookie身份驗證,它爲我工作,可能你使用aspnet身份。這是一個類似的github問題https://github.com/aspnet/Identity/issues/898 –

1

訪問令牌可以存儲在身份驗證屬性(OAuthOptions.SaveTokens選項來啓用/禁用此行爲,默認情況下爲false)。

使用AuthenticationTokenExtensions類從AuthenticationProperties獲得令牌:

public static string GetTokenValue(this AuthenticationProperties properties, string tokenName) 
public static IEnumerable<AuthenticationToken> GetTokens(this AuthenticationProperties properties) 

例如,如果使用cookie認證:

var authInfo = await HttpContext.Authentication.GetAuthenticateInfoAsync(CookieAuthenticationDefaults.AuthenticationScheme); 
string accessToken = authInfo.Properties.GetTokenValue("access_token"); 

注意,在此之前RC2令牌儲存要求(相關的PR),所以你可能會發現像下一個舊的代碼,這是行不通的

var token = User.FindFirst("access_token")?.Value