1

저는 asp.net 코어를 처음 사용합니다. 나는이 글을 읽은베어러 토큰 리디렉션없이 웹 API asp.net 코어

... 구글, 페이스 북에서 JWT 인증 및 OpenOauth를 사용하여 작은 웹 서비스를 만들려고 노력 해요 : https://stormpath.com/blog/token-authentication-asp-net-core

이 게시물 ASP에서 JWT와 인증에 관한 것입니다. Net core이지만, 또한 내 시스템에서 사용자가 비활성화되어 있거나 활성화되어 있는지 확인하고 싶습니다..

My db에는 ID, 이름, 암호, 상태 (0 - 비활성 | 1 - 활성)의 4 개 열이있는 테이블이 하나 있습니다.

내 목표를 달성하려면 어떻게해야합니까?

아무도 도와 줄 수 있습니까?

P/S : Google에서 asp.net의 jwt에 대한 전체 자습서를 검색했지만 너무 적습니다. 인증 흐름을위한 전체 소스 코드가 인정됩니다.

답변

1

내가 테스트 한 세 가지 방법이 있습니다 (효과가 있지만 어느 것이 정확한지는 모르겠습니다).

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); 

우선 OnTokenValidated 이벤트를 사용

관련 문제