【问题标题】:Getting id_token from Microsoft OAuth2.0从 Microsoft OAuth2.0 获取 id_token
【发布时间】:2018-04-06 05:32:36
【问题描述】:

Cordova 插件:https://github.com/nraboy/ng-cordova-oauth 和 ionic v1

我正在使用 oauthWindowslive 的修改版本。我正在尝试从 Microsoft OAuth2.0 中获取 id_token。由于我使用该服务来获取一些 Outlook 日历数据,因此我使用以下内容:

var browserRef = window.cordova.InAppBrowser.open('https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=' + clientId + "&scope=openid+profile+User.Read"  + '&response_type=token&response_mode=fragment' + '&display=touch' + '&redirect_uri=' + redirect_uri, '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');

但如果我为response_type 插入id_token+token,我将无法进行身份验证。即使我尝试使用id_token,我也无法进行身份验证,即使我尝试单独使用它。

【问题讨论】:

  • 你的意思是指定token作为响应类型有错误吗?您是否在应用清单中启用了隐式流程?
  • @juunas 当重定向到 Microsoft 帐户页面时,我无法超出帐户登录屏幕,也无法输入密码。是的,在生成客户端 ID 时启用了隐式流。我是否也需要在离子代码中的某个地方这样做?。
  • 不行,manifest 设置就够了。太奇怪了,登录界面真的没有报错吗?
  • 没有。没有错误。我无法超越登录屏幕。但是如果从字符串中删除 id_token 则没有问题,但没有 id_token。我需要 id_token 来刷新访问令牌。
  • 我认为nonce也是必需的。:-)

标签: cordova ionic-framework oauth-2.0 azure-active-directory ngcordova


【解决方案1】:

我终于让它工作了。 Web 服务对两件事很挑剔:

  1. id_token 必须在 token 之前,并且应该紧跟在 response_type 提示之后。 response_type=id_token+token
  2. 虽然文档说使用http://localhost/callback 是可以的,但实际上并非如此。至少,在混合应用程序上,它必须是 https://login.live.com/oauth20_desktop.srf

有趣的是,其他 Oauth 服务(例如 Google 和 Facebook localhost/callback)工作正常。 Microsoft 出于某种原因需要特殊处理。如果 Microsoft 的任何人在听 - 请清理并合并您的身份平台和文档。开发人员不应该花费 5 天时间来弄清楚如此微不足道的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 2017-04-04
    • 2023-03-27
    • 2018-08-25
    • 2016-10-26
    • 2020-03-27
    • 1970-01-01
    相关资源
    最近更新 更多