私は多くの情報源に従って、JWT 認証を WebApi2 プロジェクトに実装しようとしてきました。また、swagger.ioとSwashbuckleを使用して、API の文書化とテストの両方を開始しました。私は、例外なしがメソッドをサポートして/auth/login
を生成し、api_key
それを使用して承認を必要とする他のメソッドを呼び出す方法に触発されました。
また、私の開発は、パッケージを使用したトークンベースのセキュリティを紹介するASP.NET Web API 2JwtAuthForWebAPI
ブックに基づいているため、次のように JWT Delegating Handler を実装しています。
// Add Jwt Authentication Web Handler
var builder = new SecurityTokenBuilder();
var reader = new ConfigurationReader();
GlobalConfiguration.Configuration.MessageHandlers.Add(
new JwtAuthenticationMessageHandler
{
AllowedAudience = reader.AllowedAudience,
Issuer = reader.Issuer,
SigningToken = builder.CreateFromKey(reader.SymmetricKey),
//SigningToken = builder.CreateFromKey(reader.SubjectCertificateName),
CookieNameToCheckForToken = reader.CookieNameToCheckForToken
});
(私は web.config 資格情報を設定しており、コードは正常に実行されます)
問題は:
- 例外なしとは異なり、入力後にメソッドを呼び出すと
api_key
、swagger はキーを「ベアラー」承認ヘッダーではなくクエリ文字列に配置します - 上記のコードが JWT のクエリ文字列をチェックしているかどうかはわかりません (チェックしていたとしても、多くの理由 (セキュリティ、長い URL) からそれほど賢明ではないように思えます)。
- 上記のコードは Delegating Handler をビルドするため、デバッグして実際に何をしているのかを確認することはできません ( log4netをリンクできますか?)
[Authorise]
その結果、失敗したため、コントローラーメソッドはヒットしません。
この時点での私の質問は、上記の項目 1 を解決して、2 を問題にせず、(うまくいけば) 4 を機能させることだと思います! ありがとう。