2017-01-27 22 views
0

我正在開發一個使用本地STS進行身份驗證的ASP.NET MVC 5網站。 我將AuthorizeAttribute子類化爲自定義認證/授權過程,並將MyAuthorizeAttribute添加到GlobalFilters。 當用戶未經身份驗證進入時,MyAuthorizeAttribute.OnAuthorize成功抓住它並創建一個SignInRequest以重定向到STS。這就是我想要的。 我觀察到,當用戶認證成功和STS重定向用戶回來時,用戶的瀏覽器將嵌入到請求正文中的SAML令牌POST到我的MVC Web應用程序,這是設計,我期望MyAuthenticateAttribute可以捕獲此請求,所以我可以提取令牌從請求體中檢查並驗證它,但是,這次MyAuthenticateAttribute.OnAuthorize()函數沒有被調用,它直接進入控制器。 那麼有什麼不對嗎?我應該在哪裏捕捉並處理從用戶發佈的令牌?謝謝。所有傳入的請求是否由ASP.NET MVC中的AuthorizeAttribute處理?

回答

1

AuthorizeAttribute既是AttributeIAuthorizationFilterAttributes實際上並不是做什麼什麼,MVC框架掃描這個屬性的添加位置並將其註冊爲動態過濾器。

然而,而非裝飾控制器或動作方法有了它,你可以把它作爲一個全球性的過濾器:

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new AuthorizationAttribute()); 
     filters.Add(new HandleErrorAttribute()); 
    } 
} 

同樣的道理,你可以創建自己的IAuthorizationFilter或子類AuthorizeAttribute做任何你想。如果全球註冊,它將始終運行所有操作,然後您可以使用它來全局執行請求的自定義授權。

+0

忘了提及我已將MyAuthorizeAttribute添加到GlobalFilters。 – codewarrior