我无法生成有效的访问令牌。令牌终结点会返回给我一个JWT,但是当我使用该令牌时,我收到了401错误并显示以下消息:
“所采用的身份验证方法薄弱,无法允许此应用程序访问。提供的身份验证强度为1,要求为2。”
我理解client_credentials流需要您提供X.509证书,不幸的是,博客文章中的所有示例均为C#。
我正在使用生成的自签名证书和私钥来进行客户端声明,请求令牌时。我按照博客文章中的步骤生成了证书,并更新了清单以使用该证书。
下面是Ruby代码以供参考:
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
显然,为了安全起见,我已删除了某些信息。尽管使用的是 Ruby,但您可以看到我正在使用我的证书验证客户端使用 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"
任何帮助将不胜感激。
< p >< em >编辑
对于想在Ruby中进行类似操作的其他人,这是我使用的代码的Gist:https://gist.github.com/NGMarmaduke/a088943edbe4e703129d
该示例使用Rails环境,但应该很容易去除特定于Rails的部分。
记得用正确的值替换YOUR CLIENT ID、TENANT_ID和CERT_THUMBPRINT,并将证书路径和客户端密钥方法指向正确的文件路径。
然后你可以做这样的事情:
mailbox = OfficeAPI.new("nick@test.com")
messages = mailbox.request_messages