私はJWTについて読んでいます。
しかし、私が読んだことから、それは認証メカニズムではなく、認証メカニズムの重要なコンポーネントのようなものです。
現在、動作するソリューションを実装していますが、JWTを試して、その動作を確認するだけでした。しかし、今私がしているのは、それをどのように利用すべきかということです。それの私の経験から、それは基本的にあなたにユニークな暗号化されたキーを与えるただの暗号化メカニズムです。このトークン内に情報を入れることもできます。
モバイルアプリケーションで使用されるASP.NET Web API 2で用語を実装したいと考えています。
ステップ1:
今、これはそれについての私の理解にすぎません。
JWTの理想は、すべてのリクエストで認証する必要がないことですか?サーバーが単にJWTを使用でき、DB内のユーザーpwとユーザーを検索する必要がなくなった後、ユーザーの資格情報を(最初のログインで)認証するだけです。
JWTを使用して、ユーザーを特定したいだけです。私はそれらを認証した後、それから認可します。私が知っているように、新しいMVCおよび認証と承認とは大きな混乱があります。
だから私の質問は何に帰着します。
JWTを使用して認証メカニズムを安全かつ効果的に実装するにはどうすればよいですか?私は、機能するように思われ、セキュリティへの影響についての考えを持っていない何かをせき立てたくありません。私の要件に合った安全なメカニズムを設計した可能性のあるソースが存在することを確信しています。
私の要件は次のとおりです。
ありがとう
JWTの理解は良好です。しかし、ここにいくつかの修正といくつかの推奨事項があります。
JWTには、必要な情報を含めることができます。ユーザーの名前、生年月日、電子メールなど。これは、クレームベースの承認で行います。次に、クレーム原則からのこれらのクレームを使用してJWTを作成するようにプロバイダーに指示します。次のコードは、Membership Rebootの例からのもので、これがどのように行われるかを示しています。
public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var svc = context.OwinContext.Environment.GetUserAccountService<UserAccount>();
UserAccount user;
if (svc.Authenticate("users", context.UserName, context.Password, out user))
{
var claims = user.GetAllClaims();
var id = new System.Security.Claims.ClaimsIdentity(claims, "MembershipReboot");
context.Validated(id);
}
return base.GrantResourceOwnerCredentials(context);
}
これにより、プロセッサを集中的に使用する認証サービスにアクセスすることなく、誰がリソースにアクセスしているかを正確に制御できます。
トークンプロバイダーを実装する非常に簡単な方法は、WebAPIプロジェクトで MicrosoftのOAuth=承認サーバー を使用することです。 OAuth APIのサーバー。
また、Thinktectureの Identity Server を調べることもできます。これにより、ユーザーをより簡単に制御できます。たとえば、ユーザーが一度認証されると、IDサーバーで更新トークンを簡単に実装できます。その後、一定期間(1か月程度)、Identity Serverから短命のJWTを取得し続けることができます。更新トークンは取り消すことができますが、JWTは取り消せないため、優れています。このソリューションの欠点は、Identity Serviceをホストするために別のサーバーを1つまたは2つセットアップする必要があることです。
最後の点に対処するには、侵入者がリソースへのアクセスを取得するための最後のリクエストをコピーできないようにする必要があります最低限SSLを使用する必要がありますこれにより、転送中のトークンが保護されます。
非常に機密性の高いものを保護する場合は、トークンの有効期間を非常に短い時間に保つ必要があります。機密性の低いものを保護する場合は、寿命を長くすることができます。有効なトークンが長いほど、ユーザーのマシンが危険にさらされた場合に、攻撃者が認証済みユーザーになりすます時間が長くなります。
デフォルトのトークンではなく、署名されたJSON Webトークンを発行するようにOWIN承認サーバーを構成することに関する詳細なブログ記事を書きました。そのため、リソースサーバー(オーディエンス)は認証サーバーに登録でき、すべてのパーティ間でmachineKey値を統一する必要なく、トークン発行者パーティが発行したJWTトークンを使用できます。投稿を読むことができます Owinを使用したASP.NET Web API 2のJSON Web Token