考虑一下这个Azure AD OAuth 2.0设备流授予请求:
POST https://login.microsoftonline.com/common/oauth2/devicecode
Content-Type: application/x-www-form-urlencoded
client_id=12345678-1234-1234-1234-123456789012
&grant_type=device_code
&resource=https://graph.microsoft.com(为提高可读性而跳过的urlencoding )
根据this draft,响应应该包括一个verification_uri参数:
需要
verification_uri。授权服务器上的最终用户验证URI。URI应该简短且容易记住,因为最终用户将被要求手动将其键入到他们的用户代理中。{
"device_code": "GMMhmHCXhWEzkobqIHGG_EnNYYsAkukHspeYUk9E8",
"user_code": "WDJB-MJHT",
"verification_uri": "https://www.example.com/device",
...但是,Azure的响应包含verification_url (注意url而不是uri):
"verification_url": "https://aka.ms/devicelogin",这只是Azure的设备流实现中的一个错误吗?这两种变体都是有效的吗?是否在下一稿中将其重命名为verification_url ?
另外一个问题是,可以从Azure AD v2 端点请求设备流授予吗?
令牌端点似乎以/common/oauth2/v2.0/token的形式存在,但是它的代码请求对应返回404,/common/oauth2/v2.0/devicecode。
有一个/common/oauth2/devicecode,但是我不能在以后的/common/oauth2/v2.0/devicecode中使用它(立即返回过期的AADSTS70019验证代码)。
发布于 2018-02-20 20:00:45
可能不是打错字。你提到的IETF草案得到了Google和Microsoft的支持。但两家公司都没有考虑到这种差异,即"verification_uri“与"verification_url”。
谷歌是第一名。他们几年前就实现了这个设备流。我不确定第一次出版的确切日期,但它已经在2012年上市。他们从一开始就使用"verification_url“!IETF草案的第一个版本可以追溯到2015年,出于某种原因,负责草案的谷歌团队决定使用"verification_uri“,尽管他们自己的实现已经使用了多年的"verification_url”。他们既没有改变草案,也没有改变草案的实施。他们在文档中也使用"verification_url“。
另一方面,Facebook使用草案的版本作为字段名,即"verification_uri“。查看他们的文档(实现与文档对齐):https://developers.facebook.com/docs/facebook-login/for-devices
我还没有找到微软(即Azure's)设备流实现的正式文档,但以下是关于这个主题的几篇文章/文章,它们都在*.microsoft.com域上:
后者伴随着GitHub回购:https://github.com/Azure-Samples/active-directory-dotnet-deviceprofile。
以下是一些非MS的消息来源:
实际上,后一个例子(日语)是我能找到的Azure设备流实现的第一个详细示例。-)它也有"verification_url“。
至于您的“附加问题”(“我可以从Azure AD v2端点请求设备流授权吗?”),我不知道。微软的设备流实现甚至不是官方的(至少缺乏文档说明这一点),所以它可能会发生变化。
v2.0协议页也没有提到"devicecode“端点。请参见:
所以现在我建议不要在Azure的设备流上建立任何产品。
https://stackoverflow.com/questions/48863963
复制相似问题