gpt4 book ai didi

android - 从 Android 应用程序通过 Facebook token 对 WebAPI 进行身份验证访问

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:40:24 24 4
gpt4 key购买 nike

我正在尝试让我的 Android 应用程序登录我的 WebAPI 服务。我想分享我的想法以验证它们。

如果通过 WebSite 执行对 WebAPI 的访问,则步骤为:

1-调用WebAPI方法登录

2- WebAPI 将客户端重定向到 facebook

3- Facebook 登录并返回一个 token

4- 如果我在下一次调用中使用该 token ,我将被认证为正确的用户。

这行得通。

如果通过Android APP访问WebAPI,如何获取access token?实际上我正在做类似的事情:

1- 通过登录按钮联系 Facebook

2- 获取 Facebook 接收 token 的登录 id

3- 尝试执行 WebAPI 调用,将身份验证:承载代码添加到我的调用中

那时我正在徘徊..

既然我是那个特定用户,我的应用程序怎么办?如果我执行类似的操作

GET /API/METHOD1
Authentication: Bearer CODE

如果 Android 应用程序不告诉他,它怎么知道 CODE 是我?应用程序是否会自动联系 Facebook 以接收类似“是的!我发布该 token ,它与...相关”的回答

还是我误解了一切?

我能弄清楚的另一种方法是我必须使用“混合方法”,例如:

1- 调用 WebAPI(通过浏览器)2- 获取到 Facebook 的重定向链接3- 获取 token

但是.. 到那时,我如何才能再次在 Facebook 应用程序/Facebook 网站与我的 Android 应用程序之间切换?

抱歉弄得一团糟,我正在尝试找出此身份验证过程旁边的逻辑。

最佳答案

好的,我想我明白了!

当 WebAPI 收到 Facebook token 时,对用户和授权一无所知。但是,由于 token ,可以“作为调用者”访问 Facebook。

通过这种方式,应用程序可以执行如下操作:

  1. Android -> Facebook 登录 -> 获取 FBToken

  2. Android -> Web API -> 发送 FBToken

  3. Web API -> Facebook ->/me 发送 FBToken

  4. Facebook -> Web API -> 身份

  5. Web API -> Andoid -> This is the token for you Identity

  6. Android -> Web API -> 给我 Auth 方法,授权:Bearer WebAPIToken

我在网上找到了一个有用的类:(基于WebApi ASP.NET Identity Facebook login)

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

因此,您可以拥有如下 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;
}

完整而完美的解释在这里: http://thewayofcode.wordpress.com/2014/03/01/asp-net-webapi-identity-system-how-to-login-with-facebook-access-token/

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

希望对您有所帮助!

关于android - 从 Android 应用程序通过 Facebook token 对 WebAPI 进行身份验证访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24180034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com