asp.net core - Purpose of options.AutomaticAuthenticate with UseJwtBearerAuthentication -


after updating codebase asp 5 beta 7 rc1-final, began receiving exception jwtbearer middleware

unable cast object of type 'newtonsoft.json.linq.jarray' type 'system.iconvertible'. 

the determining factor can see far appears setting of options.automaticauthenticate. if it's true, exception, otherwise, not.

what automaticauthenticate , why need enable it?

    app.usejwtbearerauthentication(options =>     {         options.automaticauthenticate = true;      } 

here full stack trace:

at system.convert.toint32(object value, iformatprovider provider)    @ system.identitymodel.tokens.jwt.jwtpayload.getintclaim(string claimtype)    @ system.identitymodel.tokens.jwt.jwtpayload.get_nbf()    @ system.identitymodel.tokens.jwt.jwtsecuritytokenhandler.validatetoken(string token, tokenvalidationparameters validationparameters, securitytoken& validatedtoken)    @ microsoft.aspnet.authentication.jwtbearer.jwtbearerhandler.<handleauthenticateasync>d__1.movenext() --- end of stack trace previous location exception thrown ---    @ system.runtime.exceptionservices.exceptiondispatchinfo.throw()    @ microsoft.aspnet.authentication.jwtbearer.jwtbearerhandler.<handleauthenticateasync>d__1.movenext() --- end of stack trace previous location exception thrown ---    @ system.runtime.compilerservices.taskawaiter.throwfornonsuccess(task task)    @ system.runtime.compilerservices.taskawaiter.handlenonsuccessanddebuggernotification(task task)    @ system.runtime.compilerservices.taskawaiter`1.getresult()    @ microsoft.aspnet.authentication.authenticationhandler`1.<initializeasync>d__48.movenext() --- end of stack trace previous location exception thrown ---    @ system.runtime.compilerservices.taskawaiter.throwfornonsuccess(task task)    @ system.runtime.compilerservices.taskawaiter.handlenonsuccessanddebuggernotification(task task)    @ system.runtime.compilerservices.taskawaiter.getresult()    @ microsoft.aspnet.authentication.authenticationmiddleware`1.<invoke>d__18.movenext() --- end of stack trace previous location exception thrown ---    @ system.runtime.compilerservices.taskawaiter.throwfornonsuccess(task task)    @ system.runtime.compilerservices.taskawaiter.handlenonsuccessanddebuggernotification(task task)    @ system.runtime.compilerservices.taskawaiter.getresult()    @ api.startup.<<configure>b__9_0>d.movenext() in ...\startup.cs:line 156 

update on root cause

our codebase creating duplicate claims nbf, exp, , iat. explains why get_nbf in stack trace , complaint "jarray" since each of values array instead of value.

if set true middleware run on every inbound request, jwt token , if 1 present validate it, , if valid create identity , add current user.

if false doesn't happen , need request middleware set identity specifying bearer's scheme in authorize attribute.

[authorize(authenticationschemes = "yourbearerschemename")] 

or set in policy;

options.addpolicy("requirebearer", policy => {     policy.authenticationschemes.add("yourbearerschemename");     policy.requireauthenticateduser();  }); 

so, setting false aren't running bearer stuff until ask it, you're putting exception off until later.


Comments

Popular posts from this blog

android - Why am I getting the message 'Youractivity.java is not an activity subclass or alias' -

Making Empty C++ Project: General exception (Exception from HRESULT:0x80131500) Visual Studio Community 2015 -

How to fix java warning for "The value of the local variable is not used " -