diff --git a/src/RestSharp/Authenticators/JwtAuthenticator.cs b/src/RestSharp/Authenticators/JwtAuthenticator.cs index 41479d2f1..10e8493df 100644 --- a/src/RestSharp/Authenticators/JwtAuthenticator.cs +++ b/src/RestSharp/Authenticators/JwtAuthenticator.cs @@ -28,7 +28,7 @@ public JwtAuthenticator(string accessToken) : base(GetToken(accessToken)) { } [PublicAPI] public void SetBearerToken(string accessToken) => Token = GetToken(accessToken); - static string GetToken(string accessToken) => $"Bearer {Ensure.NotEmpty(accessToken, nameof(accessToken))}"; + static string GetToken(string accessToken) => Ensure.NotEmpty(accessToken, nameof(accessToken)).StartsWith("Bearer ") ? accessToken : $"Bearer {accessToken}"; protected override ValueTask GetAuthenticationParameter(string accessToken) => new(new HeaderParameter(KnownHeaders.Authorization, accessToken)); diff --git a/test/RestSharp.Tests/JwtAuthTests.cs b/test/RestSharp.Tests/JwtAuthTests.cs index 2d1200e0c..d82a5e137 100644 --- a/test/RestSharp.Tests/JwtAuthTests.cs +++ b/test/RestSharp.Tests/JwtAuthTests.cs @@ -34,6 +34,20 @@ public async Task Can_Set_ValidFormat_Auth_Header() { Assert.True(authParam.Type == ParameterType.HttpHeader); Assert.Equal(_expectedAuthHeaderContent, authParam.Value); } + + [Fact] + public async Task Can_Set_ValidFormat_Auth_Header_With_Bearer_Prefix() { + var client = new RestClient { Authenticator = new JwtAuthenticator($"Bearer {_testJwt}") }; + var request = new RestRequest(); + + //In real case client.Execute(request) will invoke Authenticate method + await client.Authenticator.Authenticate(client, request); + + var authParam = request.Parameters.Single(p => p.Name.Equals(KnownHeaders.Authorization, StringComparison.OrdinalIgnoreCase)); + + Assert.True(authParam.Type == ParameterType.HttpHeader); + Assert.Equal(_expectedAuthHeaderContent, authParam.Value); + } [Fact] public async Task Check_Only_Header_Authorization() {