Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不使用ASP.NET的Facebook OAuth 2.0身份验证_C#_Facebook Graph Api - Fatal编程技术网

C# 不使用ASP.NET的Facebook OAuth 2.0身份验证

C# 不使用ASP.NET的Facebook OAuth 2.0身份验证,c#,facebook-graph-api,C#,Facebook Graph Api,我正在为iOS和Android开发一个应用程序,使用Facebook登录。用户将使用他们的Facebook凭据登录他们的手机,我使用Facebook的GraphAPI对他们进行身份验证。我不想存储他们的电子邮件/密码,除非我必须存储 经过身份验证后,我可以从Facebook获得大量信息,但我最感兴趣的问题是访问令牌的授权令牌 由于我的应用程序有一个服务器端组件,我还需要验证此访问令牌在服务器端是否有效(因此,给定访问令牌和Facebook用户id,我应该能够验证此客户端),否则,使用Facebo

我正在为iOS和Android开发一个应用程序,使用Facebook登录。用户将使用他们的Facebook凭据登录他们的手机,我使用Facebook的GraphAPI对他们进行身份验证。我不想存储他们的电子邮件/密码,除非我必须存储

经过身份验证后,我可以从Facebook获得大量信息,但我最感兴趣的问题是访问令牌的授权令牌

由于我的应用程序有一个服务器端组件,我还需要验证此访问令牌在服务器端是否有效(因此,给定访问令牌和Facebook用户id,我应该能够验证此客户端),否则,使用Facebook对用户进行身份验证是毫无意义的,因为我还需要自己存储用户的用户名/密码

我的想法是通过SSL将用户ID和访问令牌发送到我的服务器,然后使用库来验证这些令牌是否有效,以及用户是否确实是它所说的用户,以便继续进行DB访问和其他与服务器相关的一切

然而,我很难在.NET中找到一个不使用ASP.NET的库

是否有任何库可以进行这种简单的验证(给定一个授权令牌和一个用户id,告诉我用户是否登录到Facebook,如果是,令牌的有效期是多久),而不需要注入20个不同的DLL,也不依赖ASP.NET

我已经看过DotNetOpenAuth,但是(1)它似乎需要很多DLL来运行,虽然不理想,但它本身也不错;(2)它似乎依赖于ASP.NET和microsoft库,我强烈希望避免使用这些库

我在Mono上运行我的服务器,理想情况下希望避免使用ASP.NET做任何事情,因为它们在过去被证明是非常不稳定的


非常感谢,

您可能想尝试这样的服务,它可以为您处理oAUth内容。根据文档,一旦设置好,您就可以简单地使用rest进行身份验证调用

您可能想尝试一种服务,例如为您处理oAUth内容的服务。根据文档,一旦设置好,您就可以简单地使用rest进行身份验证调用

好的,我找到了一个简单的方法

首先,我下载了:

步骤2

使用服务器访问令牌,我们能够对API进行适当的调用,以确保令牌有效

private FacebookAuthorizationResponse AuthorizeUser(FacebookClient client, string userId, string accessToken)
{
    dynamic expirationToken = client.Get("debug_token", new
                                                            {
                                                                input_token = accessToken,
                                                                access_token = _appAccessToken
                                                            });

    DateTime expiresAt = DateTimeConvertor.FromUnixTime(expirationToken.data.expires_at);
    bool isValid = expirationToken.data.is_valid;

    if (!isValid)
    {
        return new FacebookAuthorizationResponse
                    {
                        IsAuthorized = false,
                    };
    }

    dynamic response = client.Get(userId, new
                                                {
                                                    access_token = accessToken,
                                                    fields = "id,name"
                                                });

    return new FacebookAuthorizationResponse
                {
                    IsAuthorized = isValid,
                    ExpiresAt = expiresAt,
                    Name = response.name
                };
}
在哪里



好的,我找到了一个简单的方法

首先,我下载了:

步骤2

使用服务器访问令牌,我们能够对API进行适当的调用,以确保令牌有效

private FacebookAuthorizationResponse AuthorizeUser(FacebookClient client, string userId, string accessToken)
{
    dynamic expirationToken = client.Get("debug_token", new
                                                            {
                                                                input_token = accessToken,
                                                                access_token = _appAccessToken
                                                            });

    DateTime expiresAt = DateTimeConvertor.FromUnixTime(expirationToken.data.expires_at);
    bool isValid = expirationToken.data.is_valid;

    if (!isValid)
    {
        return new FacebookAuthorizationResponse
                    {
                        IsAuthorized = false,
                    };
    }

    dynamic response = client.Get(userId, new
                                                {
                                                    access_token = accessToken,
                                                    fields = "id,name"
                                                });

    return new FacebookAuthorizationResponse
                {
                    IsAuthorized = isValid,
                    ExpiresAt = expiresAt,
                    Name = response.name
                };
}
在哪里



谢谢,但它看起来不像是一个图书馆。我的服务器是用C#编写的,实际上没有任何前端。它只是向客户端提供请求,但我需要验证客户端是否有效,而不是某个狡猾的黑客试图绕过身份验证,这就是为什么我需要一个进行身份验证的.NET库。我可以自己编写HTTP调用并在需要时解析响应,但我想知道是否有一个库已经这样做了。谢谢,但它看起来不像是一个C#库。我的服务器是用C#编写的,实际上没有任何前端。它只是向客户端提供请求,但我需要验证客户端是否有效,而不是某个狡猾的黑客试图绕过身份验证,这就是为什么我需要一个进行身份验证的.NET库。我可以自己编写HTTP调用并在需要时解析响应,但我想知道是否有一个库已经这样做了。
private FacebookAuthorizationResponse AuthorizeUser(FacebookClient client, string userId, string accessToken)
{
    dynamic expirationToken = client.Get("debug_token", new
                                                            {
                                                                input_token = accessToken,
                                                                access_token = _appAccessToken
                                                            });

    DateTime expiresAt = DateTimeConvertor.FromUnixTime(expirationToken.data.expires_at);
    bool isValid = expirationToken.data.is_valid;

    if (!isValid)
    {
        return new FacebookAuthorizationResponse
                    {
                        IsAuthorized = false,
                    };
    }

    dynamic response = client.Get(userId, new
                                                {
                                                    access_token = accessToken,
                                                    fields = "id,name"
                                                });

    return new FacebookAuthorizationResponse
                {
                    IsAuthorized = isValid,
                    ExpiresAt = expiresAt,
                    Name = response.name
                };
}
public class FacebookAuthorizationResponse
{
    public bool IsAuthorized { get; set; }
    public DateTime ExpiresAt { get; set; }
    public string Name { get; set; }
}