Auth0 ASP.Net.Owin SSO验证cookie跨域

时间:2017-09-02 18:21:08

标签: asp.net cookies single-sign-on owin auth0

我正在尝试使用Auth0& amp;在同一域上的ASP.NET应用程序上设置SSO。 OWIN。我使用以下教程来setup my Owin Context

我为Auth0 cookie配置了名称&在startup.cs中使用 CookieAuthenticationOptions 的域:

string auth0Domain = ConfigurationManager.AppSettings["auth0:Domain"];
string auth0ClientId = ConfigurationManager.AppSettings["auth0:ClientId"];
string auth0ClientSecret = ConfigurationManager.AppSettings["auth0:ClientSecret"];

// Enable Kentor Cookie Saver middleware
app.UseKentorOwinCookieSaver();
// Set Cookies as default authentication type
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    //Add Cross domain
    CookieName = "sso.example.com",
    CookieDomain = ".example.com",
    AuthenticationType = CookieAuthenticationDefaults.AuthenticationType,
    LoginPath = new PathString("/Account/Login")
});

Startup.cs中的我的Auth0配置:

var options = new Auth0AuthenticationOptions()
        {
            Domain = auth0Domain,
            ClientId = auth0ClientId,
            ClientSecret = auth0ClientSecret,
            Provider = new Auth0AuthenticationProvider
            {

                OnAuthenticated = context =>
                {
                    // Get the user's country
                    JToken countryObject = context.User["https://example.com/geoip"];
                    if (countryObject != null)
                    {
                        string countryCode = countryObject["country_code"].ToObject<string>();
                        string Lat = countryObject["latitude"].ToObject<string>();
                        string Long = countryObject["longitude"].ToObject<string>();
                        string City = countryObject["city_name"].ToObject<string>();
                        string Country = countryObject["country_name"].ToObject<string>();

                        context.Identity.AddClaim(new Claim("country_code", countryCode, ClaimValueTypes.String, context.Connection));
                        context.Identity.AddClaim(new Claim("country_name", Country, ClaimValueTypes.String, context.Connection));
                        context.Identity.AddClaim(new Claim("city_name", City, ClaimValueTypes.String, context.Connection));
                        context.Identity.AddClaim(new Claim("longitude", Long, ClaimValueTypes.String, context.Connection));
                        context.Identity.AddClaim(new Claim("latitude", Lat, ClaimValueTypes.String, context.Connection));
                    }
                    JToken userMeta = context.User["https://example.com/user_metadata"];
                    if (userMeta != null)
                    {
                        string companyName = userMeta["company"].ToObject<string>();
                        context.Identity.AddClaim(new Claim("company", companyName, ClaimValueTypes.String, context.Connection));
                        string fullName = userMeta["full_name"].ToObject<string>();
                        context.Identity.AddClaim(new Claim("full_name", fullName, ClaimValueTypes.String, context.Connection));
                    }

                    JToken rolesObject = context.User["https://example.com/app_metadata"];
                    if (rolesObject != null)
                    {
                        string[] roles = rolesObject["roles"].ToObject<string[]>();
                        foreach (var role in roles)
                        {
                            context.Identity.AddClaim(new Claim(ClaimTypes.Role, role, ClaimValueTypes.String, context.Connection));
                        }
                    }

                    return Task.FromResult(0);
                }
            }

        };
        options.Scope.Add("openid profile"); // Request a refresh_token

我如何在辅助应用程序上验证客户端? Cookie在辅助应用程序中可用,但我仍然需要通过Auth0进行登录过程。我错过了什么吗?或者是否有一篇文章我可以阅读有关这一内容的文章?

1 个答案:

答案 0 :(得分:1)

我通过在两个应用上复制相同的 startup.cs 并在 system.web machine key来解决此问题>标签。

我的初始配置没有任何变化,我只是将域名更改为我的域名。