2015-09-15 24 views
6

AD kimlik doğrulamasıyla Azure'da MVC Web Uygulaması var. Web sitesini yerel olarak çalıştırdığımda, Azure AD'yi kullanarak oturum açıp kapatabilir. Ancak dağıtılan Azure web sitemdeki oturum çalışmıyor. Kullanıcı kimliği doğrulanmış olarak kalır, bu nedenle SignOutCallback eylemi her zaman Ana/Dizine yönlendirir.OWIN - Authentication.SignOut() çerezleri kaldırmıyor

Bu, projeyi oluşturduğumda oluşturulan kullanıma hazır koddur.

public class AccountController : Controller 
{ 
    /// <summary> 
    /// Use this method to sign into the website 
    /// </summary> 
    public void SignIn() 
    { 
     // Send an OpenID Connect sign-in request. 
     if (!Request.IsAuthenticated) 
     { 
      HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/" }, 
       OpenIdConnectAuthenticationDefaults.AuthenticationType); 
     } 
    } 

    /// <summary> 
    /// Use this method to sign out of the website 
    /// </summary> 
    public void SignOut() 
    { 
     string callbackUrl = Url.Action("SignOutCallback", "Account", routeValues: null, protocol: Request.Url.Scheme); 

     Request.GetOwinContext().Authentication.SignOut(
      new AuthenticationProperties { RedirectUri = callbackUrl }, 
      OpenIdConnectAuthenticationDefaults.AuthenticationType, 
      CookieAuthenticationDefaults.AuthenticationType); 
    } 

    /// <summary> 
    /// Use this method to redirect to Home page, once the request has been authenticated 
    /// </summary> 
    /// <returns>An <see cref="ActionResult"/> object.</returns> 
    public ActionResult SignOutCallback() 
    { 
     if (Request.IsAuthenticated) 
     { 
      // Redirect to home page if the user is authenticated. 
      return RedirectToAction("Index", "Home"); 
     } 

     return View(); 
    } 
} 

Ben benzer sorunlarla bir yazı here buldum ve önerdi denedi ama benim için işe yaramadı.

Bu sorunla karşılaşan başka biri var mı?

cevap

2

Sorunun ne olduğunu anladım. Oluşturduğum AD kimlik doğrulamasıyla Azure'daki kullanıma hazır MVC Web Uygulaması, AspNet çerezlerini kullanır. Hangi GetOwinContext(). Authentication.SignOut temizler. Ve bu benim için localhost'ta iyi çalışıyordu. Sorun Azure'a dağıttığımda ve daha sonra AD kimlik doğrulamasını kullanmak için web sitesini yeni Azure portalında yapılandırdığında ortaya çıktı. Web sitesini Azure Uygulama Servisi'a dönüştürmek görünüyor. Artık çerezler AppServiceAuthSession çerezleri - AspNet çerezleri artık yok. Böylece, çıkış artık çalışmıyor.

Ben bu sorunu biraz daha araştırma yaptım ve Azure AD ekipleri ve Azure Web Siteleri ekipleri konuştu: Burada

Bu konuda çalışmış, Microsoft temsilcisi yanıttır. Görünüşe göre yeni portal ayarı sizin için tüm auth bileşenlerini hallediyor. Yani gerçekten web sitenize karşı Auzre AD auth kurmak için iki yaklaşım var. Bunu, HesapController'a erişebildiğiniz Box of ASP.NET MVC projesinde gördüğünüz gibi yapabilirsiniz. Veya diğer bir yaklaşım, Azure portalında bu ayarı etkinleştirerek Azure'un sizin için halledilmesine izin vermektir. Yeni Azure portalına izin verdiğinizde, farklı bir oturum tanımlama bilgisi adı ve farklı çıkış mantığı kullanır. Otomatik kimlik doğrulamasının kodlanmış çıkış mantığıyla iyi oynamadığı anlaşılıyor.

Çözümünüz doğru. Temelde, bir MVC uygulaması almak ve Azure AD kimlik doğrulamasını destekleyen çalıştırmak için iki geçici çözümünüz var:

  1. Kod aracılığıyla AAD yetkisini destekleyen MVC uygulaması oluşturun. Güveni kurmak için uygulamayı söz konusu Azure AD kiracısı Uygulama listesine manuel olarak ekleyin. MVC uygulamanızdaki kod aracılığıyla oturum açma/oturum kapatma işlemlerini gerçekleştirin
  2. Herhangi bir auth mantığı olmayan bir MVC uygulaması oluşturun. Yeni portal aracılığıyla Azure AD auth'unu desteklemek için yapılandırın. Giriş yapmak ve giriş yapmak için belirli bağlantılar ekleyin. Bu ikinci senaryo için aşağı çekip aşağıdaki örnekle oynamanızı tavsiye ediyorum: https://github.com/btardif/Websites-Authentication-Authorization. Görebileceğiniz örnek bir Çıkış bağlantısını destekler, ancak yeni portaldaki yeni Kimlik Doğrulama/Yetkilendirme ayarlarına erişir. Bu örneği yeni web sitesine dağıtın, yeni portalda Yetkilendirme ayarlarını etkinleştirin. Oturum açma işlemlerini görür ve bu oturum kapatma çerezlerini doğru şekilde siler.