Asp.net

ASP.NET Web Api:如何使用 URL 參數傳遞訪問令牌(oAuth 2.0)?

  • January 31, 2014

您知道我可以如何在 url 參數中使用由預設 asp.net web api 2 OAuth 2 授權機制生成的 access_token。目前,我可以通過發送帶有 Authorization 標頭的請求來成功授權,如下所示:

Accept: application/json
Content-Type: application/json
Authorization: Bearer pADKsjwMv927u...

我想要的是通過 URL 參數啟用授權,如下所示:

https://www.domain.com/api/MyController?access_token=pADKsjwMv927u...

好吧 - 我同意標頭是一個更好的選擇 - 但當然也有需要查詢字元串的情況。OAuth2 規範也定義了它。

無論如何 - 此功能內置於 Katana OAuth2 中間件:

<http://leastprivilege.com/2013/10/31/retrieving-bearer-tokens-from-alternative-locations-in-katanaowin/>

public class QueryStringOAuthBearerProvider : OAuthBearerAuthenticationProvider
{
   readonly string _name;

   public QueryStringOAuthBearerProvider(string name)
   {
       _name = name;
   }

   public override Task RequestToken(OAuthRequestTokenContext context)
   {
       var value = context.Request.Query.Get(_name);

       if (!string.IsNullOrEmpty(value))
       {
           context.Token = value;
       }

       return Task.FromResult&lt;object&gt;(null);
   }
}

然後:

var options = new JwtBearerAuthenticationOptions
{
   AllowedAudiences = new[] { audience },
   IssuerSecurityTokenProviders = new[]
       {
           new SymmetricKeyIssuerSecurityTokenProvider(
               issuer,
               signingKey)
       },
   Provider = new QueryStringOAuthBearerProvider(“access_token”)
};

引用自:https://stackoverflow.com/questions/21484982