Я пытаюсь построить Ruby Служба Daemon для доступа к API-интерфейсу Office 365. В последнее время это стало возможным благодаря потоку OAuth 'client_credentials', как подробно описано в этом сообщении в блоге: http://blogs.msdn.com/b/exchangedev/archive/2015/01/22/building-demon-or-service-apps-with-office-365-mail-calendar-and-contacts-apis-oauth2-client-credential-flow.aspxOffice 365 Rest API - аутентификация недели демонов
Я изо всех сил пытаюсь создать действительный токен доступа. Маркер конечной точки возвращает мне JWT, однако при использовании этого маркера я получил 401 с этим сообщением:
The access token is acquired using an authentication method that is too weak to allow access for this application. Presented auth strength was 1, required is 2
Я понимаю, что поток client_credentials требует, чтобы вы представить X.509 сертификат, к сожалению, все примеры в блоге сообщение для C#.
Я использую сгенерированный self signed cert и закрытый ключ для выполнения утверждения клиента при запросе маркера. Я выполнил шаги в блоге, чтобы создать сертификат и обновить манифест, чтобы использовать этот сертификат.
Это рубин коды для справки:
def request_token
uri = URI.parse("https://login.windows.net/== TENANT-ID ==/oauth2/token?api-version=1.0")
https = Net::HTTP.new(uri.host, uri.port)
req = Net::HTTP::Post.new(uri.request_uri)
req.set_form_data(
:grant_type => 'client_credentials',
:redirect_uri => 'http://spready.dev',
:resource => 'https://outlook.office365.com/',
:client_id => '== Client ID ==',
:client_secret => '== Client secret =='
)
https.use_ssl = true
https.cert = client_cert
https.key = client_key
https.verify_mode = OpenSSL::SSL::VERIFY_PEER
resp = https.start { |cx| cx.request(req) }
@access_token = JSON.parse(resp.body)
end
Очевидно, что я удалил некоторые биты информации для обеспечения безопасности. Хотя это рубин, вы можете видеть, что я использую свой сертификат для проверки клиента с помощью SSL-соединения.
Вот еще некоторые детали на ошибку:
"x-ms-diagnostics" => "2000010;
reason=\"The access token is acquired using an authentication method that is too weak to allow access for this application. Presented auth strength was 1, required is 2.\";
error_category=\"insufficient_auth_strength\"",
"x-diaginfo"=>"AM3PR01MB0662",
"x-beserver"=>"AM3PR01MB0662"
Любая помощь будет признателен.
Редактировать
Для тех, кто стремится сделать что-то подобное в Руби вот Сущность кода я использую: https://gist.github.com/NGMarmaduke/a088943edbe4e703129d
В примере используется среда Rails, но она должна быть достаточно легко вырезать конкретные бит Rails.
Не забудьте заменить ВАШИ ИДЕНТИФИКАТОР КЛИЕНТА, TENANT_ID и CERT_THUMBPRINT с правильными значениями и указать путь сертификата и методы ключа клиента к правильному пути к файлу.
Затем вы можете сделать что-то вроде этого:
mailbox = OfficeAPI.new("[email protected]")
messages = mailbox.request_messages
Эй @ Ник, вы когда-нибудь заставляли это работать? Я бы хотел увидеть ваш код. Я пытаюсь сделать что-то подобное в Ruby и не могу заставить его работать даже после попытки сделать то, что сказал Джейсон. –
Эй, Джоэл, просто добавил еще несколько вопросов к вопросу с сущностью моего кода. –
Perfect. Благодаря тонну! –