首页 > 解决方案 > 需要帮助从谷歌身份验证获取电子邮件

问题描述

我有一个 asp.net C# web 应用程序。我创建的这个应用程序使用 AD 身份验证,只能在组织网络内访问。由于整个 COVID 问题,我需要将其移动到云服务中,以便用户可以访问。我的计划是从 AD 迁移到 google,因为该组织使用 google 服务。我能够按照此处的说明合并 google 登录。但它没有收到电子邮件,我需要登录用户的电子邮件作为几个 sql 查询的参数。显然,在 2019 年,谷歌将这些信息的访问权转移到了他们的“人员”范围内??我能找到的所有示例都是针对 asp.net MVC 和 CORE 的!我只是在使用常规的 ASP.net!!!!任何建议都非常感谢!

标签: c#asp.netauthenticationoauth-2.0google-api

解决方案


我找到了一个相对简单的答案。使用 Google 中设置的示例从前端调用 javascript,您可以调用 getBasicProfile()。从这里您可以获得电子邮件以及其他信息。我们可以将值设置为隐藏字段。从那里我们可以在后端访问它并做任何事情..

 <div class="g-signin2" data-onsuccess="onSignIn" runat="server"  data-theme="dark"></div>



<asp:Button ID="btnProceed" CssClass="btn btn-primary" Enabled="false" runat="server" OnClick="Button1_Click" Text="Proceed" />


<script type="text/javascript">
    function onSignIn(googleUser) {
        document.getElementById("con").style.display = 'block';  
    // Useful data for your client-side scripts:
    var profile = googleUser.getBasicProfile();
    console.log("ID: " + profile.getId()); 
    console.log('Full Name: ' + profile.getName());
    console.log('Given Name: ' + profile.getGivenName());
    console.log('Family Name: ' + profile.getFamilyName());
    console.log("Image URL: " + profile.getImageUrl());
    console.log("Email: " + profile.getEmail());

    // The ID token you can pass to your backend:
      var id_token = googleUser.getAuthResponse().id_token;
      console.log("ID Token: " + id_token);
      document.getElementById('<%=hEmail.ClientID%>').value = profile.getEmail();  //HiddenField Controls
      document.getElementById('<%=hName.ClientID%>').value = profile.getName(); //HiddenField Controls
      document.getElementById('<%=Gtoken.ClientID%>').value = id_token; //HiddenField Controls

  }
</script>


<asp:HiddenField ID="hEmail" runat="server" />
        <asp:HiddenField ID="hName" runat="server" />
        <asp:HiddenField ID="Gtoken" runat="server" />

服务器后端

protected void Button1_Click(object sender, EventArgs e)
    {

        var hidEm = hEmail.Value;
        var hidName = hName.Value;

        Session["email"] = hidEm;
        Session["fName"] = hidName;

    }

推荐阅读