Zib*_*eah 7 android facebook token asp.net-web-api
我正在尝试让我的Android应用程序登录到我的WebAPI服务.我想分享我的想法以验证它们.
如果通过WebSite访问WebAPI,则步骤如下:
1-调用WebAPI方法登录
2- WebAPI将客户端重定向到Facebook
3- Facebook登录并返回令牌
4-如果我在下次调用中使用该令牌,我将被认证为正确的用户.
这很有效.
如果通过Android APP访问WebAPI,我该如何获得访问令牌?其实我做的事情如下:
1-通过登录按钮联系Facebook
2-获取记录ID到Facebook接收令牌
3-尝试执行WebAPI调用,将Authentication:Bearer CODE添加到我的呼叫中
那时我正在徘徊..
我的应用程序现在如何才能成为特定用户?如果我执行类似的事情
GET /API/METHOD1
Authentication: Bearer CODE
Run Code Online (Sandbox Code Playgroud)
如果Android应用程序从未告诉过他,怎么知道代码是我?该应用程序是否会自动联系Facebook,以便收到"是啊!我发布该令牌,它与...相关"的答案.
或者我误解了一切?
我能弄明白的另一种方式是我必须使用"混合方法",如:
1-呼叫WebAPI(通过浏览器)2-获取重定向链接到Facebook 3-获取令牌
但是..那时,我怎么能再次在Facebook App/Facebook Site和我的Android应用程序之间切换?
对不起,我试图找出这个身份验证过程旁边的逻辑.
Zib*_*eah 10
好的,我想我已经知道了!
当WebAPI收到Facebook令牌时,对用户和授权一无所知.但是,由于令牌,可以"作为来电者"访问Facebook.
通过这种方式,应用程序可以执行以下操作:
Android - > Facebook登录 - >获取FBToken
Android - > Web API - >发送FBToken
Web API - > Facebook - >/me发送FBToken
Facebook - > Web API - >身份
Web API - > Andoid - >这是您身份的标记
Android - > Web API - >给我Auth方法,授权:Bearer WebAPIToken
我在网上发现了一个有用的课程:(基于WebApi的ASP.NET身份Facebook登录)
private async Task<FacebookUserViewModel> VerifyFacebookAccessToken(string accessToken)
{
FacebookUserViewModel fbUser = null;
var path = "https://graph.facebook.com/me?access_token=" + accessToken;
var client = new HttpClient();
var uri = new Uri(path);
var response = await client.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
fbUser = Newtonsoft.Json.JsonConvert.DeserializeObject<FacebookUserViewModel> (content);
}
return fbUser;
}
public class FacebookUserViewModel
{
[JsonProperty("id")]
public string ID { get; set; }
[JsonProperty("first_name")]
public string FirstName { get; set; }
[JsonProperty("last_name")]
public string LastName { get; set; }
[JsonProperty("username")]
public string Username { get; set; }
[JsonProperty("email")]
public string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
所以,你可以有一个像以下的WebAPI:
[HttpGet]
[AllowAnonymous]
public async Task<string> GetTokenFromFacebook(string accessToken)
{
var user = await VerifyFacebookAccessToken(accessToken);
//Search on your DB for the user ID or email
//Get token for user
return token;
}
Run Code Online (Sandbox Code Playgroud)
这里有一个完整而完美的解释:http: //thewayofcode.wordpress.com/2014/03/01/asp-net-webapi-identity-system-how-to-login-with-facebook-access-token/
令牌创建示例
var tokenExpirationTimeSpan = TimeSpan.FromDays(14);
var identity = new ClaimsIdentity(Startup.OAuthBearerOptions.AuthenticationType);
identity.AddClaim(new Claim(ClaimTypes.Name, UserName, null, "Facebook"));
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, user.ToString(), null, "LOCAL_AUTHORITY"));
AuthenticationTicket ticket = new AuthenticationTicket(identity, new AuthenticationProperties());
var currentUtc = new Microsoft.Owin.Infrastructure.SystemClock().UtcNow;
ticket.Properties.IssuedUtc = currentUtc;
ticket.Properties.ExpiresUtc = currentUtc.Add(tokenExpirationTimeSpan);
var accesstoken = Startup.OAuthBearerOptions.AccessTokenFormat.Protect(ticket);
Run Code Online (Sandbox Code Playgroud)
我希望它有所帮助!
| 归档时间: |
|
| 查看次数: |
3872 次 |
| 最近记录: |