Facebook oauth2登录返回(400)错误请求

时间:2014-01-07 16:05:35

标签: asp.net vb.net facebook facebook-graph-api

我正在将我的C#ASP.NET MVC 4 facebook登录转换为VB ASP.NET MVC 2版本项目。

不幸的是我收到了这个错误,我无法弄清楚问题是什么。

主要错误:错误请求400错误。 更详细的错误:

   WWW-Authenticate:OAuth“Facebook平台”“invalid_code”“验证验证码时出错。请确保您的redirect_uri与您在OAuth对话框请求中使用的redirect_uri相同”

控制器:

<HttpPost> _
    <AllowAnonymous> _
    Public Function ExternalLogin(provider As String, returnUrl As String) As ActionResult
        Return New ExternalLoginResult(provider, Url.Action("ExternalLoginCallback", New With { _
            Key .ReturnUrl = returnUrl _
        }))
    End Function



    Public Function ExternalLoginCallback(returnUrl As String) As ActionResult
        Dim result As AuthenticationResult = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", New With { _
            Key .ReturnUrl = returnUrl _
        }))

        ' Eind resultaat krijg je hier
        If result.IsSuccessful Then
            ' Temporary Properties
            Dim strTempGeslacht As String = result.ExtraData("gender")



            ' Properties
            Dim strVoornaam As String = result.ExtraData("firstname")
            Dim strAchternaam As String = result.ExtraData("lastname")
            Dim strEmail As String = result.ExtraData("email")
            Dim strGeboortePlaats As String = result.ExtraData("hometown")
            Dim strWoonplaats As String = result.ExtraData("location")
            Dim arrayWerk As String() = result.ExtraData("work").Split("*"C)
            Dim intGeslacht As Integer = If(strTempGeslacht = "male", 0, 1)
            Dim intOpenID As Int64 = Int64.Parse(result.ProviderUserId)
            Dim CiDutch As New CultureInfo("nl-NL", False)
            Dim strBirthday As String = String.Format("{0:dd/MM/yyyy}", result.ExtraData("birthday"))



            ' Redirect
            Return RedirectToAction("Facebook", "Bedankt")
        End If

        ' Error
        Return RedirectToAction("Index", "Home")
    End Function


    Friend Class ExternalLoginResult
        Inherits ActionResult
        Public Sub New(provider__1 As String, returnUrl__2 As String)
            Provider = provider__1
            ReturnUrl = "http://localhost:25806/Facebook/ExternalLoginCallback"
        End Sub

        Public Provider As String
        Public ReturnUrl As String

        Public Overrides Sub ExecuteResult(context As ControllerContext)
            OAuthWebSecurity.RequestAuthentication(Provider, ReturnUrl)
        End Sub
    End Class

End Class

Query Acces Token(使用downloadstring时出现错误)

 protected override string QueryAccessToken(Uri returnUrl, string authorizationCode)
        {
            WebClient client = new WebClient();
            string url = string.Format("{0}?client_id={1}&client_secret={2}&redirect_uri={3}&code={4}", TokenEP, this._appId, this._appSecret, HttpUtility.UrlEncode(returnUrl.ToString()), authorizationCode);

            string content = client.DownloadString(url);

            NameValueCollection nameValueCollection = HttpUtility.ParseQueryString(content);
            if (nameValueCollection != null)
            {
                string result = nameValueCollection["access_token"];
                return result;
            }
            return null;

        }

查询网址:

"https://graph.facebook.com/oauth/access_token?client_id=607648425938521&client_secret=ff099b80cc19da0ec0870df99fa465b0&redirect_uri=http%3a%2f%2flocalhost%3a18774%2fvacatures%2fExternalLoginCallBack%3f__provider__%3dfacebook%26__sid__%3d3dda4b1db178404094cbeef339d414b9&code=AQAAHJ0UoPjqvtOLjgUJ7ipzY0j7-8FxoTx7nt_Vxq9FD0cN-DhVH8BclofFEXPsPU7Fm1YHKGSlJRcLGedHSA23sVpkbssBp5yQo3PmBkUSZ9LBuckKrkjagvz4HkgFQ_oX2DoEPDmpkKo8O97GYlBt7j185SncBcpmbi8I7DNs9Z8wGP_FGQb8Mh6iMz3SH4IB1Ae3OppthmRXEJOj9k7xiboPsAYTf3w7E6MhWU3uNnR-SfA5RkSXkLas7xUnKF7eqmPM9_3pAMj2ObOAA1e4dcKke-QABo_FGx7LV0OY1pEeKIbbu9Ag5h0SBqmGi9k

所有链接都与工作项目C#mvc 4相同。

2 个答案:

答案 0 :(得分:6)

6小时,我花了6个小时试图找出问题所在。

这只是一个大写字母B,我做了第一个请求:ExternalLoginCallback和第二个请求:ExternalLoginCallBack

我同时感到高兴和悲伤,哈哈!

答案 1 :(得分:1)

我怀疑这实际上与.NET没有任何关系。在您的代码中,您有

ReturnUrl = "http://localhost:25806/Facebook/ExternalLoginCallback"

但是,您提供的查询网址中的值为

http://localhost:18774/vacatures/ExternalLoginCallBack

在facebook.com上的Facebook应用程序设置中,有一个返回URI字段。这个值可能与你在这里有所不同。您必须更改其中一个以使它们匹配。这就是错误所解释的。