2013-12-17 16 views
7

Harici taşıyıcı belirteci kullanarak facebook giriş yapmayı deniyorum. VS 2013'te yeni proje oluşturdum ve bu kullanıcı adı http://www.asp.net/web-api/overview/security/external-authentication-services gibi bireysel kullanıcı hesabı kimlik doğrulamasını seçtim.Harici taşıyıcı belirtecini kullanarak web oturumu açma (MVC4 Web Api)

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

Ve bütün iş para cezası:

Ben facebook kimlik doğrulaması yapılandırılmış.

Benim test yöntemi:

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

ben [HostAuthentication (DefaultAuthenticationTypes.ExternalBearer)] nasıl çalıştığını anlamıyorum.

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

Ama 401 sonuç alırsınız:

ben fiddler içinde GET isteği çağırmak.

Dış taşıyıcı belirteciyle doğrulama yapmak için ne yapmalıyım?

+0

kullanılan? –

+0

@Neshta Burada bir çözüm buldunuz mu? – Syska

+0

Aynı sorun burada. Bir facebook jetonum var ama harici taşıyıcı ile işaretlenmiş bir WebAPI yöntemine erişemiyorum. – creatiive

cevap

1

Bu sorun için çözüm bulamadım. Ama görevi başka bir yolla çözdüm. HTTP başlığı X-Facebook-Token ekledim ve oradan geçirdim. OAuthAuthorizationServerProvider'ın geçersiz kılınan yönteminde GrantResourceOwnerCredentials (context) yönteminde context.Request.Headers ["X-Facebook-Token"] ifadesini yakaladım. Eğer gelen facebook jetonu alıyorsanız nerede FacebookUtil.TryGetUser yılında

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; 
} 

() Ben Facebook kütüphanesini 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; 
    } 
}