2015-08-28 90 views
1

我想在我們的網站中使用Azure AD實現身份驗證,請參閱下面的參考資料。我們的網站使用IIS上託管的下面的ASP.NET ASP.NET MVC5。基本上使用OpenId Connect協議進行網站身份驗證,並使用oAuth2.0協議進行委託訪問,以使用令牌進行授權。使用針對Azure AD的OpenId Connect實現實現身份驗證?

https://github.com/AzureADSamples/WebApp-WebAPI-OpenIDConnect-DotNet

充分利用天青AD邏輯令牌是有在Startup.Auth.cs類,它是從所述OwinStartup類調用。

當我在我們的網站中實現此功能時,Startup.Auth.cs ConfigureAuth在APP啓動期間僅執行一次,並按照上述參考。

使用[Authorize]修飾控制器類或添加SignIn(),並檢查請求是否已通過身份驗證,然後再次調用Authenticate代碼。

public void SignIn() 
    { 
     // Send an OpenID Connect sign-in request. 
     if (!Request.IsAuthenticated) 
     { 
      HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/" }, OpenIdConnectAuthenticationDefaults.AuthenticationType); 
     } 
    } 

問題是,SignIn()方法沒有在我們的應用程序中獲得,並且對[Authorize]屬性的作用感到好奇嗎?

我非常感謝您對這些有所瞭解。非常感謝。

回答

1

ACS不支持OpenId Connect,因此不再開發 - 因此答案的第一部分將是 - 您嘗試執行的操作不受支持。這就是說,你確定你指的是ACS嗎?該示例涉及Azure AD,這是一種不同的產品。 對於答案的其餘部分,我將假設您確實參考了Azure AD。 從您的描述我不明白你遇到什麼問題。 ConfigureAuth只需要執行一次就可以完成它的工作,它將請求處理管道添加到負責處理認證的模塊(中間件)中。我不確定你使用的是「Authenticate」的代碼。這裏不應該有這樣的調用 - 當你請求一個用[authorize]裝飾的路由時,ASP.NET將強制調用者被認證;如果不是,則與第一個請求的情況相同,這會導致打開的連接中間件生成登錄請求。 Signin()方法幾乎完全相同,但不必嘗試訪問標有[authorize]的資源。

+0

是的,這是Azure AD,我已經在問題中更新了它。感謝您的迴應,它有幫助。 – SteelBird82

+0

關於「ASP.NET將強制調用者進行身份驗證」 - 它執行Startup.Auth.cs app.UseOpenIdConnectAuthentication(..)中的身份驗證處理程序中的代碼嗎?在調試代碼時我看不到這個執行。 – SteelBird82

+0

這裏強制執行意味着檢查isauthenticated標誌是否爲true,否則開始返回401。正如我在答案中所說的那樣,初始化只發生一次。如果有代碼連接通知,那麼應該執行 - 但只有當您獲取令牌時,纔會執行此操作。 – vibronet

0

如果您有明確的SignIn()操作,請不要對控制器使用[Authorize]特性。

你可能會搞亂認證cookie和Session變量。 檢查this link

瞭解詳情。