Oauth 2.0 AzureAD的OAuthPrompt/Signin始终默认为SSO凭据。如何申请备用信用卡?

Oauth 2.0 AzureAD的OAuthPrompt/Signin始终默认为SSO凭据。如何申请备用信用卡?,oauth-2.0,azure-active-directory,botframework,microsoft-teams,Oauth 2.0,Azure Active Directory,Botframework,Microsoft Teams,我为一个客户做了一个机器人。 其目的是通过安全API运行管理命令 为此,他们需要 使用标准帐户登录团队 当它们执行管理命令时,bot请求OAuth登录(连接设置为AzureAD v2模式) 在门户中的teams/tester中,它从不要求提供凭据,只是默认为登录的用户 我怎样才能让它总是只要求凭证 一种方法是制作一个单独的AzureAD,但这需要客户再次支付高级广告,以便能够将为管理API定义的AzureAD角色分配给组而不是单个用户。 所以这不是一个很好的解决方案 他们还可以将团队许可证添加到

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

为此,他们需要

  • 使用标准帐户登录团队
  • 当它们执行管理命令时,bot请求OAuth登录(连接设置为AzureAD v2模式)
  • 在门户中的teams/tester中,它从不要求提供凭据,只是默认为登录的用户
  • 我怎样才能让它总是只要求凭证

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

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


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

    我不确定这是否完全回答了您的问题,我对您想要什么感到有点困惑。但据我所知, 我遵循了以下文档:

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

    我测试了这个,当我和机器人交谈时,它总是要求我登录,所以希望这就是你想要的?如果没有,请说明缺少哪个部分,谢谢

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

    更新 经过进一步的讨论,我明白了你的问题所在。你需要做的是以下几点。在bot通道注册->设置->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) 
    

    如果他们已经通过团队身份验证,为什么要询问凭据?在执行管理命令时,您想使用什么凭据,更重要的是为什么?我想问,因为他们的团队用户不是他们的管理员用户。这些是系统管理员,对于任何管理任务,如安全“隔离MACHINEX”,他们需要使用他们的管理员帐户,而不是个人团队帐户。这是在执行管理任务时遵循MSFT的任何最佳实践指南。当请求登录azure AD时,它非常简单,您只需在请求中添加“&prompt=Select\u Account”。但是由于botframework登录站点正在处理它,我似乎没有找到设置该标志的方法。这似乎是一个简单的添加,对管理员来说有很多好处。如果一家公司遵循MSFT最佳实践和安全指南,则无法创建任何执行任何管理功能的团队机器人。我希望使用自己的管理员帐户的凭据,该管理员帐户在AzureAD中分配了自定义角色。然后,连接使用用户模拟来获取这些角色,然后使用后端进行身份验证,该后端只允许某个管理员运行某些命令。您可能希望有一个管理员能够将计算机与网络隔离,但有更少或更多的管理员能够再次将其隔离。感谢您的回答,这是我正在使用的示例。但是,如果大多数计算机启用了单点登录,则弹出窗口会自动登录。这就是为什么我希望能够设置提示参数,以确保它始终发出请求。这样,任何人都可以在需要时使用他们的管理员帐户登录。在tester和teams客户端中的行为是不同的。至少有几次我在测试仪中被问到。这一切都取决于计算机是否已登录帐户(sso、azure ad加入等)。然后提示=未设置选择帐户。它将询问或自动登录。这是token.botframework.com功能的一个超级简单的附加组件。我希望我也能投票支持它(到100秒!lol),但我没有这样做的选择:D但你只是用最少的工作量保存了我的项目。顺便说一句,我选择了选择提示符=选择\帐户。。与登录类似,但允许他们选择是否已多次登录,或选择其他帐户。。这太完美了!