Google Oauth - access_token始终为null

时间:2014-06-26 17:17:59

标签: c# asp.net oauth oauth-2.0 google-oauth

尝试使用库后,我正尝试自己实施Google OAuth登录。

我在Google上创建了应用,并尝试使用代码登录:

查看:

<a href="#" class="button"  id="A1" onclick="OpenGoogleLoginPopup();" name="butrequest"> <span>Login with google</span></a>
...
<script type="text/javascript" language=javascript>
    function OpenGoogleLoginPopup() {
        var url = "https://accounts.google.com/o/oauth2/auth?";
        url += "scope=https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email&";
        url += "state=%2Fprofile&"
        url += "redirect_uri=<%=Return_url %>&"
        url += "response_type=token&"
        url += "client_id=<%=Client_ID %>";

        window.location = url;
    }
</script>

代码背后:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
        {
            Client_ID = ConfigurationSettings.AppSettings["google_clientId"].ToString();
            Return_url = ConfigurationSettings.AppSettings["google_RedirectUrl"].ToString();
        }
        if (Request.QueryString["access_token"] != null)
        {
            String URI = "https://www.googleapis.com/oauth2/v1/userinfo?access_token=" + Request.QueryString["access_token"].ToString();
            WebClient webClient = new WebClient();
            Stream stream = webClient.OpenRead(URI);
            string  b;
            using (StreamReader br = new StreamReader(stream))
            {
                b = br.ReadToEnd();
            }
...

但是,在我登录谷歌并从谷歌Request.QueryString["access_token"]重定向到此页面后,这是空的。

我现在做错了什么?我使用谷歌控制台标有蓝色箭头的数据:

enter image description here

1 个答案:

答案 0 :(得分:2)

在Google首次重定向时,不会向您返回access_token。

OAuth2的工作原理如下:

  1. 您将用户发送到登录网址,传递您的clientID,redirect_uri和州(您这样做了)
  2. 用户成功登录后,Google会将GET请求重定向回redirect_uri,并将您发送的状态和访问代码传递给您。
  3. 在向服务器发出的GET请求中,您必须回到https://accounts.google.com/o/oauth2/token并向他们发送您的client_secret以及他们传递给您的代码。
  4. 该帖子的回复将包含您正在寻找的access_token。
  5. 我建议您通读https://developers.google.com/accounts/docs/OAuth2Login#authenticatingtheuser