2017-09-02 15 views
0

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でログイン処理を行う必要があります。何か不足していますか?あるいは、私はそのインプリメンテーションについて読むことができる記事がありますか?

答えて

1

私は両方のアプリケーションで同じstartup.csをコピーし、のsystem.webタグで、ルートWeb設定ファイルへmachine keyを追加することでこれを解決しました。

私の初期設定から何も変わっていません。ドメイン名を自分のドメインに変更しました。

+0

はい、同じアプリケーションキーを持つアプリケーションは同じCookieを共有します – Verthosa

関連する問題