簡體   English   中英

OWIN安全性 - 如何在保持身份驗證承載令牌的同時在cookie中返回刷新令牌

[英]OWIN Security - How to return a refresh token in a cookie while maintaining authentication bearer tokens

我在基於Web API 2模板的Web服務中設置刷新令牌。 它將由我們自己的網站和外部客戶使用。

經過一段時間的研究,關於從XSS攻擊中保護刷新令牌的一般建議是將標識符存儲在加密的cookie中。 我知道我可以使用UseCookieAuthentication方法而不是UseOAuthBearerAuthentication返回cookie中的身份驗證和刷新令牌,但這會在我處理外部客戶端時引起復雜化。

我目前用於設置配置的代碼是:

public void ConfigureAuth(IAppBuilder app)
{
    var applicationProvider = new ApplicationOAuthProvider();

    var applicationRefreshProvider = new ApplicationRefreshTokenProvider();

    var oAuthServerOptions = new OAuthAuthorizationServerOptions
    {
        AllowInsecureHttp = true,

        TokenEndpointPath = new PathString("/token"),
        AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),

        Provider = applicationProvider,
        RefreshTokenProvider = applicationRefreshProvider
    };

    // Token Generation
    app.UseOAuthAuthorizationServer(oAuthServerOptions);
    app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}

我可以實現的解決方法是向資源服務器上的控制器添加一個方法,然后為基於javascript的客戶端執行轉換步驟,但這對我來說沒有多大意義。

有沒有辦法可以在auth配置中實現這一點,這是正確的方法嗎? 如果我能提供幫助,我不想走錯方向。

我一直在研究這個問題,我只是在試驗,而我還沒有最終確定解決方案 但是,我發現在我的refreshTokenProvider中,在CreateAsync方法中,而不是context.SetToken,我可以這樣做:

public async Task CreateAsync(AuthenticationTokenCreateContext context)
{
  // actual logic that retrieves refresh token...
  context.Response.Cookies.Append("refresh_token", refreshToken.ToString());
}

這將在響應中設置一個cookie,而不是像人們期望的那樣向JSON響應體添加刷新令牌。 我的計划是執行此操作或使用SetToken,具體取決於請求刷新令牌的客戶端。

然后,在ReceiveAsync方法中,我有:

public async Task ReceiveAsync(AuthenticationTokenReceiveContext context)
{
  var refreshToken = context.Request.Cookies["request_token"];
  // actual logic that verifies refresh token, etc. 
}

到目前為止,我發現的唯一警告是,在發送grant_type = refresh_token請求時創建的AuthenticationTokenReceiveContext構造函數將不允許空令牌,因此如果我將任何字符串作為refresh_token傳遞它將正常工作。

重復一遍,我還沒有完全充實它。 我需要弄清楚如何緩解CSRF攻擊並顯然加密cookie,將其標記為僅限http等等。我確信這些都不是不可克服的。 但是我希望這可以幫助別人並且可能引發討論,因為我老實說也不知道我是否“正確地”這樣做了。 但它確實有效 ,我的目標是在此之后提出一個解決方案: http//jeremymarc.github.io/2014/08/14/oauth2-with-angular-the-right-way/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM