代码之家  ›  专栏  ›  技术社区  ›  Sunil

在Webforms中使用Nemiro OAuth库进行Google身份验证

  •  0
  • Sunil  · 技术社区  · 6 年前

    我正在尝试使用Nemiro库在Webforms asp中对Google进行身份验证。net项目。此库文档位于 Nemiro GoogleClient Documenation

    我有一个简单的aspx页面,名为 ExternalLogin.aspx ,其标记和代码如下所示。

    问题

    使用我的代码 Login using Google 点击按钮,则用户不会直接进入谷歌的授权页面。我的代码中缺少什么导致了这种情况?

    加成

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ExternalLogin.aspx.cs" Inherits="ExternalLogin" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <asp:Button ID="btnGoogle" runat="server" Text="Login using Google" OnClick="btnGoogle_Click" />
            </div>
        </form>
    </body>
    </html>
    

    代码隐藏

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    using Nemiro;
    using Nemiro.OAuth.Clients;
    using Nemiro.OAuth;
    
    public partial class ExternalLogin : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
    
        protected void btnGoogle_Click(object sender, EventArgs e)
        {
    
            var result = OAuthWeb.VerifyAuthorization();
            if (result.IsSuccessfully)
            {
                var user = result.UserInfo;
                Response.Write(String.Format("User ID:  {0}<br />", user.UserId));
                Response.Write(String.Format("Name:     {0}<br />", user.DisplayName));
                Response.Write(String.Format("Email:    {0}", user.Email));
            }
        }
    }
    

    我还在Application\u Start事件中定义了Google OAuth的键,如下所示。

    void Application_Start(object sender, EventArgs e)
    {
         Nemiro.OAuth.OAuthManager.RegisterClient(
                  new Nemiro.OAuth.Clients.GoogleClient(
                     "some-value-1",
                     "some-value-2"
                   ));
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   woodykiddy    6 年前

    我想你应该看看 OAuthWeb.RedirectToAuthorization 方法这是 API doc 供您参考。所以只需在 btnGoogle_Click ,然后在中验证您的授权 Page_Load 事件处理程序。

    以下是示例代码:

    protected void btnGoogle_Click(object sender, EventArgs e)
    {
        OAuthWeb.RedirectToAuthorization("Google", new Uri(Request.Url, "ExternalLogin.aspx").AbsoluteUri);
    }
    
    protected void Page_Load(object sender, EventArgs e)
    {
       if (!IsPostback)
       {
            var result = OAuthWeb.VerifyAuthorization();
            if (result.IsSuccessfully)
            {
                var user = result.UserInfo;
                Response.Write(String.Format("User ID:  {0}<br />", user.UserId));
                Response.Write(String.Format("Name:     {0}<br />", user.DisplayName));
                Response.Write(String.Format("Email:    {0}", user.Email));
            }
        }
    }
    

    此外,如果您想在不同的页面上验证授权结果,只需在URI构造函数中更改页面名称,并在 Page\u加载 新页面的事件。

    希望有帮助。