2013-12-17 8 views
7

Ich versuche Facebook Login mit externen Bearer-Token zu implementieren. Ich habe ein neues Projekt in VS 2013 erstellt und die Authentifizierung des einzelnen Benutzerkontos wie in diesem Tulorial http://www.asp.net/web-api/overview/security/external-authentication-services ausgewählt.Facebook-Anmeldung mit externem Bearer-Token (MVC4 Web API)

ich konfiguriert Facebook-Authentifizierung:

app.UseFacebookAuthentication(
      appId: "123[...]", 
      appSecret: "123[...]"); 

und alle funktionieren.

Meine Testmethode:

[OverrideAuthentication] 
[HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)] 
[Route("ExternalLogin2", Name = "ExternalLogin2")] 
public async Task<IHttpActionResult> GetExternalLogin2() 
{ 
    ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity); 
    return Ok(); 
} 

Ich verstehe nicht, wie [HostAuthentication (DefaultAuthenticationTypes.ExternalBearer)] arbeitet.

Ich rufe GET-Anfrage in Fiedler:

GET http://localhost:17353/api/Account/ExternalLogin2 HTTP/1.1 
Authorization: Bearer [my facebook token] 
Content-Length: 28 
Host: localhost:17353 

Ich aber nehme 401 Ergebnis.

Was muss ich tun, um mit einem externen Bearer-Token zu authentifizieren?

+0

Wo Sie die Facebook-Token von zu bekommen? –

+0

@Neschta Haben Sie hier eine Lösung gefunden? – Syska

+0

Gleiches Problem hier. Ich habe ein Facebook-Token, kann aber nicht auf eine WebAPI-Methode zugreifen, die mit einem externen Bearer markiert ist. – creatiive

Antwort

1

Ich habe keine Lösung für dieses Problem gefunden. Aber ich habe die Aufgabe auf andere Weise gelöst. Ich habe HTTP-Header X-Facebook-Token hinzugefügt und dort übergeben. In der übergeleiteten Methode GrantResourceOwnerCredentials (context) von OAuthAuthorizationServerProvider habe ich das Token von context.Request.Headers ["X-Facebook-Token"] abgefangen.

string facebookToken = context.Request.Headers["X-Facebook-Token"]; 
if (facebookToken == null) 
{ 
    context.SetError("invalid_grant", "Facebook token was not found in X-Facebook-Token header."); 
    return; 
} 

dynamic facebookUser; 
if (!FacebookUtil.TryGetUser(facebookToken, out facebookUser)) 
{ 
    context.SetError("invalid_grant", "Facebook token is incorrect."); 
    return; 
} 

In FacebookUtil.TryGetUser() verwendete ich Facebook-Bibliothek http://www.nuget.org/packages/facebook

public static bool TryGetUser(string facebookToken, out dynamic user) 
{ 
    var facebookClient = new FacebookClient(facebookToken) 
    { 
     AppId = AppSettings.FacebookAppId, 
     AppSecret = AppSettings.FacebookAppSecret 
    }; 

    try 
    { 
     user = facebookClient.Get("me"); 
     return true; 
    } 
    catch (Exception) 
    { 
     user = null; 
     return false; 
    } 
} 
Verwandte Themen