OAuth token expiration in MVC6 app

后端 未结 1 953
眼角桃花
眼角桃花 2021-01-01 23:28

So I have an MVC6 app that includes an identity server (using ThinkTecture\'s IdentityServer3) and an MVC6 web services application.

In the web services application

相关标签:
1条回答
  • 2021-01-02 00:17

    Edit: this bug was fixed in ASP.NET Core RC2 and the workaround described in this answer is no longer needed.


    Note: this workaround won't work on ASP.NET 5 RC1, due to this other bug. You can either migrate to the RC2 nightly builds or create a custom middleware that catches the exceptions thrown by the JWT bearer middleware and returns a 401 response:

    app.Use(next => async context => {
        try {
            await next(context);
        }
    
        catch {
            // If the headers have already been sent, you can't replace the status code.
            // In this case, throw an exception to close the connection.
            if (context.Response.HasStarted) {
                throw;
            }
    
            context.Response.StatusCode = 401;
        }
    });
    

    Sadly, that's how the JWT/OAuth2 bearer middleware (managed by MSFT) currently works by default, but it should be eventually fixed. You can see this GitHub ticket for more information: https://github.com/aspnet/Security/issues/411

    Luckily, you can "easily" work around that by using the AuthenticationFailed notification:

    app.UseOAuthBearerAuthentication(options => {
        options.Notifications = new OAuthBearerAuthenticationNotifications {
            AuthenticationFailed = notification => {
                notification.HandleResponse();
    
                return Task.FromResult<object>(null);
            }
        };
    });
    
    0 讨论(0)
提交回复
热议问题