【发布时间】:2017-01-10 17:08:37
【问题描述】:
因此,我一直在考虑针对使用 Azure AD 的自定义 API 使用 Microsofts cordova-plugin-ms-adal plugin(使用本机库)为 Cordova 移动应用程序设置 OAuth 2.0。这一切都很好,但我对秘密的使用(或更具体地说是它的缺失)有点困惑。
在网络上的许多文章中,他们声明在使用授权码授予并请求令牌时,您包含秘密。并且当您可以安全地存储秘密时,这种授权类型非常适合使用,例如在服务器上。
然而插件不需要在应用程序中指定秘密(这是正确的),但它仍然使用授权码授予来进行身份验证。我也可以手动调用
https://login.windows.net/common/oauth2/authorize?resource=http://***.onmicrosoft.com/***API&client_id=***&response_type=code&redirect_uri=http://***.onmicrosoft.com/***App
在我的浏览器中,登录,获取代码,然后使用 POST 到https://login.windows.net/common/oauth2/token
grant_type: authorization_code
client_id: ***
code: ***
redirect_uri: http://***.onmicrosoft.com/***App
resource: http://***.onmicrosoft.com/***API
它可以工作,所以我得到了一个有效的 JWT,无需发送秘密。
为什么!?这不安全吗? (我还注意到OAuth 2.0 spec section 4.1.3 并没有说明授予类型授权代码需要秘密!?)
使用没有秘密/基本身份验证标头的授权类型授权码有什么影响?
【问题讨论】:
-
你能告诉我你是如何在浏览器登录中获取代码的,你是否使用 Javascript 或任何服务器端语言进行了 POST。我正面临这个问题,需要你的帮助!!!!
-
@SouravDas 为了更好地理解我手动调用端点。一旦您在浏览器中调用第一个 URL 并登录,它就会重定向到您使用 ?code= 参数配置的 redirect_uri。当您 POST 到令牌端点时使用此值 - 我使用 getpostman.com 进行测试。在我的实际代码中,我有 cordova-plugin-ms-adal 插件设置来为我处理这个!
-
感谢您的回复。我们使用 ADFS 而不是 AZAD,所以我想我必须写完整个东西!