我知道這是真的老了,但我有同樣的問題。如果你還沒有找到答案,也幫助別人誰來找:
要記住中間件的事情是,你得到的控制器把它買走,後響應之前處理請求。所以,你不需要直接訪問屬性,你只需要查看他們的結果。
考慮以下幾點:
namespace CustomAuthApp.MVC
{
public partial class Startup
{
public void ConfigureAuth(IAppBuilder app)
{
app.Use(async (ctx, next) =>
{
if (ctx.ExtensionMethodToCheckIfAccessTokenExistsInRequestMaybeAsACookie())
{
var ident = new ClaimsIdentity("External");
ctx.Request.User = new ClaimsPrincipal(ident);
}
await next();
if (ctx.Response.StatusCode == 401)
{
var loginUri = String.Format("{0}?ReturnUrl={1}", "/Account/Login", ctx.Request.Path);
ctx.Response.Redirect(loginUri);
}
}
});
}
}
我們去檢查,如果從服務的OAuth訪問令牌存在,如果是的話,設置ClaimsPrincipal上的要求(這將使其繞過[Authorized]
屬性)。然後,在await next()
處理請求後,我們可以檢查響應狀態並設置所需的任何重定向。
顯然,這是一個非常簡單的例子,並沒有考慮之類的角色或索賠進去,但它應該讓你在路上。