首页 > 解决方案 > AzureAD 的 OAuthPrompt/SigniIn 始终默认为 SSO 凭据。如何申请备用信用?

问题描述

我为客户制作了一个机器人。目的是通过安全的 API 运行管理命令。

为此,他们需要

  1. 使用标准帐户登录团队
  2. 当他们执行管理员命令时,机器人会要求 OAuth 登录(连接设置为 AzureAD v2 模式)。
  3. 在门户中的团队/测试人员中,它从不要求提供凭据,它只是默认为登录用户。

我如何让它总是只要求提供凭据?

一种方法是制作单独的 AzureAD,但这需要客户再次为高级 AD 付费,以便能够将针对管理 API 定义的 AzureAD 角色分配给组而不是单个用户。所以这不是一个很好的解决方案。

他们还可以将团队许可证添加到他们的管理员帐户,但这会破坏整个工作流程和拥有机器人的理由。因为他们必须打开浏览器并记录团队的管理员凭据。

我希望这是可能的,否则我非常难过,失去了一些惊人的管理场景可能性。不幸的是,我们的企业客户都不允许使用员工标准帐户触发各种管理 API。

标签: oauth-2.0azure-active-directorybotframeworkmicrosoft-teams

解决方案


我不确定这是否完全回答了你的问题,我对你想要什么感到有点困惑。但据我了解,我在这里遵循了此文档:https ://docs.microsoft.com/en-us/microsoftteams/platform/bots/how-to/authentication/add-authentication?tabs=dotnet%2Cdotnet-样本

该示例有一个使用 azure ad 进行身份验证的机器人,它每次都会为我在团队中弹出 azure 登录窗口。出现请登录按钮,然后单击登录,它会弹出登录窗口,然后您可以获取令牌并使用它来调用图形等。

我对此进行了测试,当我与机器人交谈时,它总是要求我登录,所以希望这就是你要找的吗?如果没有,请说明缺少哪一部分,谢谢

编辑:说明适用于 aad v1 端点,但如果您想使用 v2 端点,它几乎相同。只需输入更少,您还需要输入您授予 api 权限的范围,例如“User.Read User.ReadBasic.All etc etc”

更新 因此,经过进一步讨论,我看到了您的问题。你需要做的是以下。在机器人频道注册 -> 设置 -> oauthconnectionsettings 中,记下您的值并将其删除。

然后使用这些参数创建一个新的,以相同的名称命名,

service provider: Oauth 2 Generic Provider
ClientID: same as before
secret: same as before. 
scope list delimiter: ' '
authorization URL Template: https://login.microsoftonline.com/common/oauth2/v2.0/authorize   (Replace Common with your tenant, just because i was using common)
Auth URL Query string template (this is key): ?client_id={ClientId}&response_type=code&redirect_uri={RedirectUrl}&scope={Scopes}&state={State}&prompt=login 
token url template: https://login.microsoftonline.com/common/oauth2/v2.0/token (again replace common with your tenant id)
token url query string tempalte : ?
token body template: code={Code}&grant_type=authorization_code&redirect_uri={RedirectUrl}&client_id={ClientId}&client_secret={ClientSecret}
refresh url template: https://login.microsoftonline.com/common/oauth2/v2.0/token  (again replace common with your tenant id)
refresh url query string: ?
refresh body template: refresh_token={RefreshToken}&redirect_uri={RedirectUrl}&grant_type=refresh_token&client_id={ClientId}&client_secret={ClientSecret}
scopes: Mail.Read Mail.Send User.Read User.ReadBasic.All  (or whatever your scopes are) 

在此处输入图像描述


推荐阅读