Невозможно получить токен с сервера авторизации Thinktecture

Я не могу получить токен доступа с сервера авторизации Thinktecture. После успешного получения кода гранта я пытаюсь сделать POST-запрос к конечной точке токена, но всегда получаю 400 неверных запросов с таким ответом: message: "{" error ":" invalid_client " }"

Мой запрос был: POST к https://host/authz/users/oauth/token тело запроса токена: {"code": "grant_code_received_from_previous_request", "client_id": "myclient", "grant_type": "authorization_code", "client_secret":"мой секрет" }

Мой клиент правильно настроен на Сервере авторизации. Мой идентификатор клиента и секрет верны; это то же значение, которое я использовал для кода предоставления в предыдущем запросе (/users/oauth/authorize).

Любая идея для этой проблемы "invalid_client"? В ответе нет другой информации, кроме "invalid_client".

3 ответа

Решение

Вам нужно отправлять учетные данные клиента, используя базовую аутентификацию http вместо того, чтобы публиковать Id и secret в теле.

Я последовал совету @leastprivilege и сделал это:

// set up the base64-encoded credentials
let clientId = "myclientid"
let clientSecret = "myclientsecret"

let loginString = NSString(format: "%@:%@", clientId, clientSecret)
let loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)!
let base64LoginString = loginData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(0))

После этого создал экземпляр запроса следующим образом:

var request = NSMutableURLRequest(URL: myUrl!)
request.HTTPMethod = "POST"

// Only these four are required based on the documentation.        
let postString = "grant_type=authorization_code&code=\(code)&redirect_uri=app:/your.redirect.uri"

request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)

request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")

Надеюсь, поможет!

Вы можете получить более подробную информацию о файле регистрации. Взгляните на это, вы можете проверить параметры ведения журнала на web.config Identity Server:

 <system.diagnostics>
<!-- simple system.diagnostics logger -->
<trace autoflush="true" indentsize="4">
  <listeners>
    <add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="Trace.log" />
    <remove name="Default" />
  </listeners>
</trace>

<!-- can be used with TraceSource logger -->
<!--<sources>
  <source name="Thinktecture.IdentityServer"
          switchValue="Information, ActivityTracing">
    <listeners>
      <add name="xml"
           type="System.Diagnostics.XmlWriterTraceListener"
           initializeData= "trace.svclog" />
    </listeners>
  </source>
</sources>-->

Дополнительную информацию о регистрации можно найти по адресу: http://identityserver.github.io/Documentation/docs/configuration/logging.html

Другие вопросы по тегам