Skype for Business在线身份验证错误-403权限被拒绝

时间:2019-03-17 18:56:37

标签: authentication oauth-2.0 azure-active-directory skype-for-business ucwa

您好,Microsoft / Azure / Skype专家

我的任务是从macOS应用程序(本机)访问Skype for Business Online帐户中的状态数据。 不幸的是,当我访问自动发现请求时,总是遇到403错误,并且从未获得到应用程序资源的链接

我一直在关注本文档 https://docs.microsoft.com/en-us/skype-sdk/ucwa/authenticationusingazuread

STEP 1   我们已使用Office 365帐户凭据在Azure管理门户中注册了该应用程序。

  • 我们使用了自定义重定向网址(http://localhost
  • 在清单中将“允许隐式流”设置为true
  • 我们预先配置了Skype for business所需的权限 线上 enter image description here

STEP 2 按照文档中的说明发出GET,以启动登录和授权检查。

  

获取https://login.microsoftonline.com/common/oauth2/authorize?response_type=token&client_id=c#####-4d41-485e-871f-0a22aa79e52b&redirect_uri=http://localhost

这将返回200 OK。

第3步 如文档中所述,我们获得了自动发现URL。 这就是我得到的-我使用标记为红色的域。 enter image description here

步骤4 根据文档,他们要求我这样做

使用隐式授权流请求访问令牌 所以我按照说明发出了GET

  

https://login.microsoftonline.com/oauth2/authorize?   response_type = id_token&client_id = ######-4d41-485e-871f-0a22aa79e52b   &redirect_uri = http://localhost   &state = 8f0f4eff-360f-4c50-acf0-99cf8174a58b   &resource = https://webdirin1.online.lync.com

现在,这将显示登录页面,我先登录,然后抛出错误

AADSTS90014%3a+The+required+field+%27nonce%27+is+missing.

我研究了此错误,但无法修复。 因此,经过大量研究并查看了此Microsoft文档LINK(https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#requesting-individual-user-consent),显然还有另一种获取不记名令牌的方法。

步骤4-第二尝试

然后,我通过发送Skype for Business的SCOPE参数来征求个人用户的同意。 然后,我向发出GET请求

  

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=#######-4d41-485e-871f-0a22aa79e52b&response_type=code&redirect_uri=http://localhost&response_mode=query&scope=https://api.skypeforbusiness.com/User.ReadWrite&state=12345

这将返回一个访问代码,我将在下一步中使用该访问代码来获取令牌

第5步-获取承载令牌

将POST发布到以下URL https://login.microsoftonline.com/common/oauth2/v2.0/token随着 在POST正文中跟踪数据

  

“ grant_type”:“ authorization_code”,“ client_id”:   “ ######-4d41-485e-871f-0a22aa79e52b”,“范围”:   “ https://api.skypeforbusiness.com/User.ReadWrite”,“代码”:   “ OAQABAAIAAACEfexX .........”,“ redirect_uri”:“ https://localhost

这将在以下响应JSON中返回承载令牌

{
"access_token" = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1........w4b--    gnWG_iOGtQ";
"expires_in" = 3599;
"ext_expires_in" = 3599;
scope = "https://api.skypeforbusiness.com/User.ReadWrite";
"token_type" = Bearer;
}

STEP 6

是的!在laaast获得了承载令牌! 现在回到主要文档 https://docs.microsoft.com/en-us/skype-sdk/ucwa/authenticationusingazuread

执行操作的地方-'使用不记名令牌重新发送自动发现请求' 我们执行

的GET请求
  

https://webdirin1.online.lync.com/Autodiscover/AutodiscoverService.svc/root/oauth/user

现在,根据文档,应该返回此JSON

{
            "_links":{
            "self": 
     {"href":"https://webdirX.online.lync.com/Autodiscover/AutodiscoverService.svc/root/user"},
         "applications": 
        {"href":"https://webpoolXY.infra.lync.com/ucwa/oauth/v1/applications"}
         }
         }

但我得到了403:PERMISSIONS拒绝的错误

<div class="content-container"><fieldset>
 <h2>403 - Forbidden: Access is denied.</h2>
 <h3>You do not have permission to view this directory or page 
  using the credentials that you supplied.</h3>
</fieldset></div>

因此,我从来没有得到应用程序的URL,并且我已经检查了清单,注册,而且我不知道为什么会出现此错误。

任何输入将不胜感激。

1 个答案:

答案 0 :(得分:1)

对于步骤4,您需要在URL中指定nonce=somestring。通常,这应该是仅使用一次的安全随机值。它可以包含任何值。

此外,您仅请求一个ID令牌。设置response_type=id_token+token