Asp.net mvc Owin:ExternalLoginClientID&;基于url的秘密

Asp.net mvc Owin:ExternalLoginClientID&;基于url的秘密,asp.net-mvc,owin,Asp.net Mvc,Owin,我是OWIN的新手,想知道是否可以根据url在我们的startup类中更改ClientId和Client机密?我们正在多租户站点中使用OWIN,确实需要解决此问题。我不确定您的意思-您想在哪里更改ClientID和客户端机密?在第三方提供商上还是在本地?你能澄清一下吗 这可能有效,也可能无效——尽管我认为没有理由不这样做: if(System.Web.HttpContext.Current.Request.RawUrl == "YourUrlHere") {

我是OWIN的新手,想知道是否可以根据url在我们的startup类中更改ClientId和Client机密?我们正在多租户站点中使用OWIN,确实需要解决此问题。

我不确定您的意思-您想在哪里更改ClientID和客户端机密?在第三方提供商上还是在本地?你能澄清一下吗

这可能有效,也可能无效——尽管我认为没有理由不这样做:

if(System.Web.HttpContext.Current.Request.RawUrl == "YourUrlHere")
            { 

            var fbOptions =  new FacebookAuthenticationOptions
            {
                AppId = "etcetc",
                AppSecret = "etcetc"
            };
}
else if( etc. etc.)
{
}

app secret/id存储在一个类中,该类在启动时初始化一次,然后由
AuthenticateCoreAsync
的每个内置实现使用

虽然在应用程序启动后没有任何东西阻止您更改此值,但这样做绝对不是线程安全的(因为这实际上是一个共享全局对象)

不幸的是,您也无法更改此行为,因为这些实现都标记为内部,并且硬编码为从此选项对象提取appsecret/id

见:


似乎您唯一的选择是复制代码(因为它是开源的)并修改行为以满足您的需要

要在我们的startup Classis中进行本地更改,我不认为您的startup Classis在应用程序启动后可以更改,因为它负责创建处理身份验证的OWIN中间件(如果这是您的要求),以及基于URL使用不同的密钥。我认为你可以在你的配置文件中设置这个,以便在应用程序第一次启动时选择正确的URL,但我认为你不能动态地这样做。我可能是错的,但我不认为你们可以。RawUrl只是一个“/”(斜杠)和请求。Url看起来好像是在运行网站,但请求有不同的扩展给你们不同的Url。Imo您的配置问题比任何问题都严重,因为客户端机密从启动前就绑定到特定URL。您应该在应用程序启动阶段根据您的应用程序选择您的值:)没问题,很高兴能为您提供少量帮助(如果有的话)!
string tokenRequest = "grant_type=authorization_code" +
    "&code=" + Uri.EscapeDataString(code) +
    "&redirect_uri=" + Uri.EscapeDataString(redirectUri) +
    "&client_id=" + Uri.EscapeDataString(Options.AppId) +
    "&client_secret=" + Uri.EscapeDataString(Options.AppSecret);