1

私はasp.netコアを初めて使用しています。私はこの記事を読んだベアラトークンWEB API asp.netコアリダイレクトなし

...グーグル、FacebookやからJWT認証とOpenOauthを使用して小規模なWebサービスを作成しようとしている: https://stormpath.com/blog/token-authentication-asp-net-core

この投稿は、ASPでのJWTで認証についてです。ネットコアだが、私はまた、ユーザが私のシステムで無効になっているか、アクティブであるかどうかを確認したいと思う。

My dbには、ID、名前、パスワード、ステータス(0 - 無効| 1 - アクティブ)の4つのテーブルがあります。

私の目標はどのように達成できますか?

誰でも教えてください。

P/S:私はasp.netのjwtについて完全なチュートリアルをgoogleで検索しましたが、ほとんどありませんでした。認証フローの完全なソースコードは高く評価されています。

答えて

1

私は3つの方法がテストされている(彼らは働いたが、どちらが正しい方法であるか分からない)。

まずOnTokenValidatedイベントを使用している:

OnTokenValidated = async (ctx) => 
{ 
     if(user is disabled) 
     { 
      ctx.Response.Headers.Append(
         HeaderNames.WWWAuthenticate, 
         ctx.Options.Challenge); 
      ctx.SkipToNextMiddleware(); 
     } 
} 

第二には、JWTのミドルウェア後Use方法を使用している:

 app.Use(async (context, next) => 
     { 
      var auth = await context.Authentication.AuthenticateAsync("Bearer"); 
      if (auth.Identity.IsAuthenticated && user is disabled) 
      { 
       context.Response.Headers.Append(
         HeaderNames.WWWAuthenticate, 
         "Bearer"); 
      } 
      await next(); 
     }); 

最終SecurityTokenValidatorsを使用している:

public class CustomSecurityTokenValidator : JwtSecurityTokenHandler 
{ 
    public CustomSecurityTokenValidator() 
    { 
    } 

    public override ClaimsPrincipal ValidateToken(string securityToken, 
     TokenValidationParameters validationParameters, out SecurityToken validatedToken) 
    { 
     var principal = base.ValidateToken(securityToken, validationParameters, out validatedToken); 
     if(user is disabled) 
     { 
      throw new SecurityTokenNotYetValidException(); 
     } 
     else 
     { 
      return principal; 
     } 
    } 
} 

..... in Startup.cs ........... 
var options = new JwtBearerOptions() 
{ 
    //.... 
} 
options.SecurityTokenValidators.Clear(); 
options.SecurityTokenValidators.Add(new CustomTokenValidator()); 
app.UseJwtBearerAuthentication(options); 
関連する問題