web-dev-qa-db-ja.com

WebAPIのクエリ文字列でOWINベアラートークンを渡して検証する

ショートバージョン:OWINベアリングトークンをリクエストヘッダーではなくクエリパラメーターとして渡して確認する必要があります。

次に、そのトークン文字列に基づいてメソッドを承認するにはどうすればよいですか?

背景:webapiメソッドを呼び出して、ファイルをストリームとしてダウンロードしたい(そして、ユーザーが既知のファイルの場所からファイルをダウンロードしたくない)。

カスタムのリクエストヘッダー、つまりベアラートークンも設定する必要がある場合、これを機能させることはできません。

クエリ文字列でトークンを渡すことができるはずですが、そのトークンを取得してユーザーを認証する方法がわかりません。

フィルタリングする必要がありますか?特別請求等は必要ですか? webapiメソッドは関数パラメーターの1つとして「access_token」を含める必要がありますか?

16
BronwenZ

私はそれがどのように機能するかについてここに書いた: http://leastprivilege.com/2013/10/31/retrieveing-bearer-tokens-from-alternative-locations-in-katanaowin/

8
leastprivilege

完全を期すために、 ここに 別のきちんとした解決策。

エキス:

app.Use(async (context, next) =>
{
    if (context.Request.QueryString.HasValue)
    {
        if (string.IsNullOrWhiteSpace(context.Request.Headers.Get("Authorization")))
        {
            var queryString = HttpUtility.ParseQueryString(context.Request.QueryString.Value);
            string token = queryString.Get("access_token");

            if (!string.IsNullOrWhiteSpace(token))
            {
                context.Request.Headers.Add("Authorization", new[] { string.Format("Bearer {0}", token) });
            }
        }
    }

    await next.Invoke();
});
23
Dunc

またはこのようにします

    app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
    {
        Authority = IdentityConfig.Authority,
        RequiredScopes = new[] { "api" },
        TokenProvider = new OAuthBearerAuthenticationProvider
        {
            OnRequestToken = ctx =>
            {
                if (String.IsNullOrWhiteSpace(ctx.Token) && ctx.Request.QueryString.HasValue)
                {
                    NameValueCollection parsedQuery = HttpUtility.ParseQueryString(ctx.Request.QueryString.Value);
                    ctx.Token = parsedQuery["access_token"];
                }

                return Task.FromResult(0);
            }
        }
    });
2
Mr. Pumpkin