Ich versuche, eine JWT mit oAuth 2.0 Middleware zu validieren. Ich habe versucht, einen benutzerdefinierten Provider in meiner Startup.cs-Klasse:Wie Anpassen der JWT-Token-Validierung in OAuth 2.0/owin?
public class Startup
{
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
// Web API routes
config.MapHttpAttributeRoutes();
ConfigureOAuth(app);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(config);
}
public void ConfigureOAuth(IAppBuilder app)
{
OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
//For Dev enviroment only (on production should be AllowInsecureHttp = false)
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/oauth2/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(5),
Provider = new CustomOAuthProvider(),
AccessTokenFormat = new RMAJwtAuthenticator.CustomJwtFormat("www.abc.com")
};
// OAuth 2.0 Bearer Access Token Generation
app.UseOAuthAuthorizationServer(OAuthServerOptions);
// start : Code for Validating JWT
var issuer = "www.abc.com";
var audience = "www.xyz.com";
var secret = TextEncodings.Base64Url.Decode("Yuer534553HDS&dsa");
// Api controllers with an [Authorize] attribute will be validated with JWT
app.UseJwtBearerAuthentication(
new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
AllowedAudiences = new[] { audience },
IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
{
new SymmetricKeyIssuerSecurityTokenProvider(issuer, secret)
},
Provider = new CustomOAuthBearerProvider()
});
//End: Code for Validating JWT
}
}
In meinem CustomOAuthBearerProvider der IOAuthBearerAuthenticationProvider erbt, sofern ich die defination von ApplyChallenge(), RequestToken() und ValidateIdentity():
public class CustomOAuthBearerProvider : IOAuthBearerAuthenticationProvider
{
public Task ApplyChallenge(OAuthChallengeContext context)
{
return Task.FromResult<object>(null);
}
public Task RequestToken(OAuthRequestTokenContext context)
{
return Task.FromResult<object>(null);
}
public Task ValidateIdentity(OAuthValidateIdentityContext context)
{
return Task.FromResult<object>(null);
}
}
Jetzt, wenn ich versuche, eine Autorisierte Ressource zu bekommen, bekomme zuerst RequestToken() und dann weiß ich nicht, wie JWT validiert wurde und die Kontrolle an die ValidateIdentity() Methode übergeben wurde.
Der Grund, warum ich den Validierungsprozess anpassen möchte, ist das Speichern und Erweitern der Ablaufzeit meines JWT in der Datenbank (Sie können auch alles vorschlagen, um die Ablaufzeit eines JWT zu erhöhen, ohne das ursprüngliche Token zu ändern).
Bitte kommentieren Sie, was auch immer Gedanken/Vorschläge/gut-schlechte Übung Optionen/Links, die Sie fühlen, wird hilfreich sein. Danke.