私がどのように使用できるか、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ミドルウェアに組み込まれています。
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<object>(null);
}
}
その後:
var options = new JwtBearerAuthenticationOptions
{
AllowedAudiences = new[] { audience },
IssuerSecurityTokenProviders = new[]
{
new SymmetricKeyIssuerSecurityTokenProvider(
issuer,
signingKey)
},
Provider = new QueryStringOAuthBearerProvider(“access_token”)
};
したがって、Global.asaxに移動して、このメソッドを追加します。
void Application_BeginRequest(object sender, EventArgs e)
{
if (ReferenceEquals(null, HttpContext.Current.Request.Headers["Authorization"]))
{
var token = HttpContext.Current.Request.Params["access_token"];
if (!String.IsNullOrEmpty(token))
{
HttpContext.Current.Request.Headers.Add("Authorization", "Bearer " + token);
}
}
}
更新:@ leastprivilegeの回答を確認してください。はるかに優れたソリューションです。
トークンがクエリ文字列で保護されていないため、これはひどい考えです。ヘッダーはSSLで暗号化されています。