nbarbettini/SimpleTokenProvider

How can i change 401 unauthorized repsonse ?

Opened this issue · 4 comments

wiody commented

Hi,
How to change '/Account/Login?ReturnUrl=%2Fapi%2Fvalues' this link. I need change response .I want to show message 'Unauthorized'.

What do you have in your Startup class?

wiody commented

public partial class Startup
{
// The secret key every token will be signed with.
// Keep this safe on the server!
private static readonly string secretKey = "mysupersecret_secretkey!123";

    private void ConfigureAuth(IApplicationBuilder app)
    {
        var signingKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(secretKey));

        app.UseSimpleTokenProvider(new TokenProviderOptions
        {
            Path = "/api/token",
            Audience = "ExampleAudience",
            Issuer = "ExampleIssuer",
            SigningCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256),
            IdentityResolver = GetIdentity
        });

        var tokenValidationParameters = new TokenValidationParameters
        {
            // The signing key must match!
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = signingKey,

            // Validate the JWT Issuer (iss) claim
            ValidateIssuer = true,
            ValidIssuer = "ExampleIssuer",

            // Validate the JWT Audience (aud) claim
            ValidateAudience = true,
            ValidAudience = "ExampleAudience",

            // Validate the token expiry
            ValidateLifetime = true,

            // If you want to allow a certain amount of clock drift, set that here:
            ClockSkew = TimeSpan.Zero
        };

        app.UseJwtBearerAuthentication(new JwtBearerOptions
        {
            AutomaticAuthenticate = true,
            AutomaticChallenge = true,
            TokenValidationParameters = tokenValidationParameters
        });

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AutomaticAuthenticate = true,
            AutomaticChallenge = true,
            AuthenticationScheme = "Cookie",
            CookieName = "access_token",
            TicketDataFormat = new CustomJwtDataFormat(
                SecurityAlgorithms.HmacSha256,
                tokenValidationParameters)
        });
    }

    private Task<ClaimsIdentity> GetIdentity(string username, string password)
    {
        // Don't do this in production, obviously!
        if (username == "TEST" && password == "TEST123")
        {
            return Task.FromResult(new ClaimsIdentity(new GenericIdentity(username, "Token"), new Claim[] { }));
        }
            
        // Credentials are invalid, or account doesn't exist
        return Task.FromResult<ClaimsIdentity>(null);
    }
}

Are you using Bearer authentication only? I believe removing the UseCookieAuthentication call will cause 401 to be returned.

I can confirm this works. I just hade the same question and commented out that part.