2015-04-27 2 views
2

Я реализовал свой собственный пользовательский IAuthenticator под названием OAuth2BearerAuthenticator, которая в основном берет в ClientId и ClientSecret и перед любой запрос был сделан, он проверяет, если он имеет действительный однонаправленного Токен - если не будет использовать учетные данные клиента уйти и «Обновить» токен, прежде чем приступать к исходному запросу.RestSharp OAuth2 Bearer Аутентификация В противном случае с Access Denied

Authenticate метод этого пользовательского аутентификатора содержит следующее:

public void Authenticate(IRestClient client, IRestRequest request) 
{ 
    if (!bearerTokenExpiration.HasValue || bearerTokenExpiration.Value < DateTime.Now) 
    { 
     RefreshBearerToken(); 
    } 

    if (request.Parameters.Any(p => p.Name.Equals("Authorization", StringComparison.OrdinalIgnoreCase))) 
    { 
     return; 
    } 

    request.AddHeader("Authorization", string.Format("Bearer {0}", bearerToken)); 
} 

Я проверил, что носителем маркера, что производящая действительно - я могу успешно запросить данные из API я пытаюсь получить доступ с один и тот же заголовок авторизации маркера на предъявителя в DHC (расширение Chrome REST) ​​

Я также подтвердил, что он не возвращается раньше из инструкции if (any authorization paramaters).

Однако RestSharp не удается с ответом "HTTP Basic: Access denied.\n"

Я не знаю, если это уместно, но ответ также содержит заголовок WWW-Authenticate со значением Basic realm=\"Web Password\"

Любая помощь очень ценится. Благодарю.

ответ

1

Я думаю, что если вы используете однонаправленный маркер для проверки подлинности запроса вы можете использовать этот способ:

client.AddDefaultHeader("Authorization", string.Format("Bearer {0}", bearerToken)); 

Надеется, что это работает!

Смежные вопросы