使用 Azure AD 进行身份验证,最后一步访问 Skype for Business 失败
Authentication using Azure AD, failing at last step accessing Skype for Business
我正在按照本指南 (https://docs.microsoft.com/en-us/skype-sdk/ucwa/authenticationusingazuread) 访问 Skype for Business。一切顺利,直到最后一部分,但让我们一步一步来。我正在构建我的 .net 控制台应用程序来执行此操作,但为了正确地向您解释我遇到的问题,我将通过 Insomnia(用于进行 http 调用的软件)直接向您展示 http 调用。
第一步:
对 https://webdir.online.lync.com/autodiscover/autodiscoverservice.svc/root 的 GET 请求
我打了 200,作为回答,我收到了这个:
第 2 步:
我用的是userlink。
所以我向 https://webdir1e.online.lync.com/Autodiscover/AutodiscoverService.svc/root/oauth/user 发送了一个 http 请求,我得到了 401 Unauthorized(一切仍然正确)。
在答案的 header 中,它指向身份提供者以请求授权 (authorization_uri)
第 3 步:我使用那个 link 来授权我的应用程序,它有自己的 client_Id(我在下面的屏幕截图中隐藏了)。
这就是我拨打电话的方式:
如果我发送这个 http 请求,我会被重定向到要求我个人登录的页面,通过插入我的凭据,我成功登录并点击 404,在答案中我收到了我的 访问令牌.
第 5 步:我将访问令牌用于与第 1 步相同的 AutodiscoverService link。这是为了注册我的应用程序。我打了 200,然后收到了 link 以访问 Skype for Business。
最后(这就是出错的地方)我向 applications link 发送了一个 POST 请求和 Bearer 令牌,我收到了403 禁止。我认为我正确地遵循了指南,但我无法弄清楚为什么我可以在最后一步访问该资源。
编辑:
权限已授予。我隐藏了名称,因为它包含我公司的名称。但是和我登录的域名是一样的。
所以您生成的令牌授权您访问位于 https://webdir1e.online.lync.com which you've done to fetch a new set of resources including the "application" resouce which is on a DIFFERENT host: https://webpooldb41e14.infra.lync.com 的资源。
您实际上现在必须获得另一个 OAuth 令牌,它授权您使用应用程序资源,然后您可以 POST 到那个以在 UCWA 中生成您的会话。
附带说明...如果您在 Azure 中定义了自己的单租户应用程序,并且已被授予 SkypeForBusinessOnline 的权限,那么我认为您应该将授权和身份验证端点定位为以下形式:
https://login.microsoftonline.com/{tenantID}/oauth2/v2.0/授权
https://login.microsoftonline.com/{tenantID}/oauth2/v2.0/token
我还应该补充一点,如果您正在尝试编写贵公司用户将使用的受信任的安全客户端,我建议您查找资源所有者密码凭据身份验证流程。它允许您直接点击我上面提到的令牌端点并交换 username/password 凭据以获得访问令牌。然后,您可以在后台轻松管理自动发现和应用程序创建,而无需来回重定向到 Azure。
https://docs.microsoft.com/mt-mt/azure/active-directory/develop/v2-oauth-ropc
我正在按照本指南 (https://docs.microsoft.com/en-us/skype-sdk/ucwa/authenticationusingazuread) 访问 Skype for Business。一切顺利,直到最后一部分,但让我们一步一步来。我正在构建我的 .net 控制台应用程序来执行此操作,但为了正确地向您解释我遇到的问题,我将通过 Insomnia(用于进行 http 调用的软件)直接向您展示 http 调用。
第一步: 对 https://webdir.online.lync.com/autodiscover/autodiscoverservice.svc/root 的 GET 请求 我打了 200,作为回答,我收到了这个:
第 2 步: 我用的是userlink。 所以我向 https://webdir1e.online.lync.com/Autodiscover/AutodiscoverService.svc/root/oauth/user 发送了一个 http 请求,我得到了 401 Unauthorized(一切仍然正确)。 在答案的 header 中,它指向身份提供者以请求授权 (authorization_uri)
第 3 步:我使用那个 link 来授权我的应用程序,它有自己的 client_Id(我在下面的屏幕截图中隐藏了)。 这就是我拨打电话的方式:
如果我发送这个 http 请求,我会被重定向到要求我个人登录的页面,通过插入我的凭据,我成功登录并点击 404,在答案中我收到了我的 访问令牌.
第 5 步:我将访问令牌用于与第 1 步相同的 AutodiscoverService link。这是为了注册我的应用程序。我打了 200,然后收到了 link 以访问 Skype for Business。
最后(这就是出错的地方)我向 applications link 发送了一个 POST 请求和 Bearer 令牌,我收到了403 禁止。我认为我正确地遵循了指南,但我无法弄清楚为什么我可以在最后一步访问该资源。
编辑:
权限已授予。我隐藏了名称,因为它包含我公司的名称。但是和我登录的域名是一样的。
所以您生成的令牌授权您访问位于 https://webdir1e.online.lync.com which you've done to fetch a new set of resources including the "application" resouce which is on a DIFFERENT host: https://webpooldb41e14.infra.lync.com 的资源。
您实际上现在必须获得另一个 OAuth 令牌,它授权您使用应用程序资源,然后您可以 POST 到那个以在 UCWA 中生成您的会话。
附带说明...如果您在 Azure 中定义了自己的单租户应用程序,并且已被授予 SkypeForBusinessOnline 的权限,那么我认为您应该将授权和身份验证端点定位为以下形式:
https://login.microsoftonline.com/{tenantID}/oauth2/v2.0/授权 https://login.microsoftonline.com/{tenantID}/oauth2/v2.0/token
我还应该补充一点,如果您正在尝试编写贵公司用户将使用的受信任的安全客户端,我建议您查找资源所有者密码凭据身份验证流程。它允许您直接点击我上面提到的令牌端点并交换 username/password 凭据以获得访问令牌。然后,您可以在后台轻松管理自动发现和应用程序创建,而无需来回重定向到 Azure。
https://docs.microsoft.com/mt-mt/azure/active-directory/develop/v2-oauth-ropc