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



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

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

  2. 我不确定 Google 控制台是否支持通配符 url 作为返回您的,也不确定如何在 MVC 代码中实现这一点(例如:http://localhost/* 或{0}..类似的东西。(所以动态输入参数将从谷歌返回)

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

更新 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;
}

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

首先,无论您的应用程序位于众多 URL 中的哪一个(myapp.com/tenant1、/tenant2 等),您都有一个重定向 URL(例如 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 等效项)中创建一个本地条目非常有用,因此您的本地主机也可以通过 eg 解析。http://test.myapp.com

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

  • http://localhost/google-api-php-client-samples/Analytics/Oauth2.php
  • http://localhost/authorize/

您可以拥有任意数量的它们,但通配符不起作用。

最新更新