Auth0 & OWINを使用して、同じドメインのASP.NETアプリケーションでSSOをセットアップしようとしています。私はsetup my Owin Contextに次のチュートリアルを使用しました。Auth0 ASP.Net.Owin SSOクッキーのクロスドメインを確認する
私はCookieAuthenticationOptions startup.csでで名前&ドメインを持つAuth0クッキーを設定した:Startup.csで
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")
});
マイ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でログイン処理を行う必要があります。何か不足していますか?あるいは、私はそのインプリメンテーションについて読むことができる記事がありますか?
はい、同じアプリケーションキーを持つアプリケーションは同じCookieを共有します – Verthosa