Dev*_*ess 2 asp.net-mvc google-api multi-tenant google-oauth owin
我创建了一个 MVC/API 项目来启用外部身份验证,并且对我的本地主机 url 工作正常。但是,我需要实现以下目标。
我支持多租户(相同的应用程序服务和不同的数据库),因此每个租户必须根据 MVC url 中的自定义参数连接不同的数据库,例如:https://localhost/tenant1 , .../tenant2, ... /tenant3 等(此时不使用单独的子域)
我不确定 Google 控制台是否支持通配符 url 作为返回 ur 并且不确定如何在 MVC 代码中实现它(例如:http://localhost/ * OR {0} .. 类似的东西。(所以动态输入参数将从谷歌返回)
我正在阅读并尝试一些解决方案。一旦我得到完整的解决方案,将在这里更新答案。同时,如果有人有任何建议,请帮助我。
更新1:
我已更新我的源代码如下:
在重定向到外部登录之前创建会话对象
System.Web.HttpContext.Current.Session["Tenant"] = "tenantname";
Run Code Online (Sandbox Code Playgroud)
回调后读取租户详细信息并保存在会话中,以根据租户名称进行后续的数据库调用
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;
}
Run Code Online (Sandbox Code Playgroud)
这是一个常见的要求,很容易解决。有两个组成部分。
首先,无论您的应用程序位于多个 URL 中的哪一个(myapp.com/tenant1、/tenant2 等),您都有一个重定向 URL(例如 myapp.com/oauthredirect)。
其次,当开始 OAuth 舞蹈(https://developers.google.com/identity/protocols/OAuth2WebServer#redirecting)时,您可以指定一个state参数,该参数将传递到您的 oauthredirect 例程中(例如 as state=tenant1)。完成用户注册任务后,您可以使用它来创建重定向回适当的站点 URL。
在开发者控制台中指定重定向 URL 时要小心。它们必须与实际 URL 逐个字符匹配。因此,例如,您需要同时指定http://myapp.com/oauthredirect和https://myapp.com/oauthredirect。我一直发现在/etc/hosts(或 Windows 等效项)中创建本地条目非常有用,因此您的本地主机也由例如解析。http://test.myapp.com
| 归档时间: |
|
| 查看次数: |
1458 次 |
| 最近记录: |