来自谷歌控制台的动态重定向网址 - oAuth

时间:2017-03-27 19:43:27

标签: asp.net-mvc google-api google-oauth owin multi-tenant

我创建了一个MVC / API项目来启用外部身份验证,并且对我的本地主机URL工作正常。但是,我需要实现以下目标。

  1. 我支持多租户(相同的应用服务和不同的数据库),因此每个租户必须根据MVC网址中的自定义参数连接不同的数据库 例如:https://localhost/tenant1,... / tenant2,... / tenant3等(此时不再使用单独的子域名)

  2. 我不确定Google控制台是否支持将通配符url作为返回ur并且不确定如何在MVC代码中实现该功能(例如:http://localhost/ *或{0} ...类似于。(因此动态输入参数将从谷歌返回)

  3. 我正在阅读并尝试一些解决方案。一旦我得到完整的解决方案,将在这里更新答案。在此期间,如果有人有任何建议,请帮助我。

    更新1:

    我更新了我的源代码,如下所示:

    在重定向到外部登录之前创建会话对象

    System.Web.HttpContext.Current.Session["Tenant"] = "tenantname";
    

    回调后阅读租户详细信息并保存在会话中,以便根据租户名称进行后续数据库调用

    public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
        {
            var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
            if (loginInfo == null)
            {
                return RedirectToAction("Login");
            }
    
            if (System.Web.HttpContext.Current.Session["Tenant"] != null)
            {
                string sessionObj = System.Web.HttpContext.Current.Session["Tenant"] as String;
            }
    

2 个答案:

答案 0 :(得分:3)

这是一个常见的要求,很容易解决。有两个组成部分。

首先,无论您的应用程序存在多少网址(myapp.com/tenant1,/ tenant2等),您都有单一重定向网址(例如myapp.com/oauthredirect)。

其次,在开始OAuth舞蹈(https://developers.google.com/identity/protocols/OAuth2WebServer#redirecting)时,您可以指定一个state参数,该参数将传递到您的oauthredirect例程(例如state=tenant1)。然后,您可以使用此功能在完成用户注册任务后创建重定向到相应的站点URL。

在开发人员控制台中指定重定向网址时要小心。它们必须是与实际URL匹配的逐个字符。所以,例如,您需要同时指定http://myapp.com/oauthredirecthttps://myapp.com/oauthredirect。我总是发现在/etc/hosts(或等效的Windows)中创建本地条目非常有用,所以你的localhost也可以通过例如解析。 http://test.myapp.com

答案 1 :(得分:1)

  

授权重定向URI用于来自Web服务器的请求。这个   是您的应用程序中用户被重定向到之后的路径   他们已通过Google验证。路径将附加   访问的授权代码。必须有一个协议。的无法   包含URL片段或相对路径。不能是公共IP   地址。

你可以随心所欲地使用它们,但外卡不起作用。