强制用户与MVC C#中的谷歌组织(G套房)帐户登录(Forcing user to sign in

2019-09-27 06:26发布

我在我的MVC网站实现谷歌认证。 这里是我的示例代码 -

AuthConfig.cs

public static class AuthConfig
    {
        private static string GoogleClientId = ConfigurationManager.AppSettings["GoogleClientId"];
        private static string GoogleClientSecret = ConfigurationManager.AppSettings["GoogleClientSecret"];
        public static void RegisterAuth()
        {
            GoogleOAuth2Client clientGoog = new GoogleOAuth2Client(GoogleClientId, GoogleClientSecret);
            IDictionary<string, string> extraData = new Dictionary<string, string>();

            OpenAuth.AuthenticationClients.Add("google", () => clientGoog, extraData);
        }
    }

Global.asax中

 AuthConfig.RegisterAuth();

AccountController.cs

public ActionResult RedirectToGoogle()
        {
            string provider = "google";
            string returnUrl = "";
            return new ExternalLoginResult(provider, Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));
        }

        [AllowAnonymous]
        public ActionResult ExternalLoginCallback(string returnUrl)
        {
            string ProviderName = OpenAuth.GetProviderNameFromCurrentRequest();

            if (ProviderName == null || ProviderName == "")
            {
                NameValueCollection nvs = Request.QueryString;
                if (nvs.Count > 0)
                {
                    if (nvs["state"] != null)
                    {
                        NameValueCollection provideritem = HttpUtility.ParseQueryString(nvs["state"]);
                        if (provideritem["__provider__"] != null)
                        {
                            ProviderName = provideritem["__provider__"];
                        }
                    }
                }
            }

            GoogleOAuth2Client.RewriteRequest();

            var redirectUrl = Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl });
            var retUrl = returnUrl;
            var authResult = OpenAuth.VerifyAuthentication(redirectUrl);

            string ProviderDisplayName = OpenAuth.GetProviderDisplayName(ProviderName);

            if (authResult.IsSuccessful)
            {
                string ProviderUserId = authResult.ProviderUserId;
            }

            return Redirect(Url.Action("Index", "User"));
        }

此代码工作正常。 但我想限制用户登录与他/她的组织机构帐户像"abc@example.com" 。 我在哪里可以指定托管域属性? 当我创建的应用程序ID和秘密从谷歌开发者控制台这个程序,我看到了Verify domain选项卡。 我需要在这里添加我的组织域?

Answer 1:

您可以排序的。 您可以指定验证URI参数范围内的HD(托管域)参数。

HD - OPTIONAL -对HD(托管域)参数简化了登录过程对于G套件托管帐户。 由包含G的套件用户的域(例如,mycollege.edu),则可以指示该帐户选择UI应该在该域帐户进行优化。 为了优化对于G套件帐户通常,而不是仅仅一个域,使用星号:HD = *。

不要依赖此UI优化,以控制谁可以访问你的应用程序,如客户端的请求可以被修改。 一定要验证返回的ID令牌有高清要求值匹配您所期望的(如mycolledge.edu)。 不同于请求参数,ID令牌权利要求包含在从谷歌安全令牌内,因此该值是可信的。



文章来源: Forcing user to sign in with their Google Organization (G Suite) account in mvc c#