基本身份验证而不是 AAD(Azure Active Directory)身份验证

Basic Authentication instead of AAD (Azure Active Directory) Authentication

我的 Microsoft Teams 应用程序需要访问使用基本身份验证的 REST Web 服务。

教程似乎只展示了如何使用 Azure Active Directory 进行身份验证:

https://docs.microsoft.com/en-us/learn/modules/embedded-web-experiences/7-exercise-implement-tab-authentication

以上教程向用户显示登录提示并验证客户端。我如何为基本身份验证实现类似的东西?

编辑:我提到客户端是因为我希望 Teams 记住登录信息。 Web 服务主要用于协作。所以我不能为所有用户使用同一个帐户

EDIT2

为了完整起见,我包括了一个示例客户端调用,它最终运行正常(它第一次向用户显示登录弹出窗口,就像在浏览器中一样):

var url = "https://example.com/Service.svc/Request";
var init = {credentials:"include", headers:{"Accept":"application/json"}};
fetch(url,init)
    .then(response => response.text())
    .then(data => alert(data));

A​​zure AD 不支持外部服务的基本身份验证。您有两个选择:

  • 如果可以,请从基本身份验证迁移到 "Modern Auth"(OpenID Connect/OAuth/(不得已)SAML)。这个是首选。

  • 想办法向最终用户询问他们的用户名/密码,因为这基本上是基本身份验证所需要的

最后但同样重要的是,如果您的 Web 服务实际上不需要用户帐户,而只需要服务帐户,您可以将有关该 Web 服务的身份验证详细信息保存在 Azure KeyVault 中,并在需要时读出它们构建基本授权 header.

但同样,Azure AD 不支持基本身份验证。事实上,Microsoft 正在弃用 Exchange Online 的基本身份验证,如 announced here.

我假设您正在尝试访问一些需要基本身份验证的外部页面或资源。否则就没有理由尝试宣誓。 Teams 似乎支持选项卡的基本身份验证,例如,我可以添加一个选项卡将其指向具有基本身份验证的网站,并且会出现一个紫色的弹出窗口,但如何从应用程序触发它是另一回事。 假设你只是调用 https://api.abc.com/whatever all the time in the app, one "maybe" solution would be to embed an iframe somewhere in your teams app view, and load that domain, like https://api.abc.com/test 如果该页面需要身份验证,它应该弹出这个紫色的身份验证 window 你可以在你的 "basic auth" 中输入。在你这样做之后,团队 "browser" 理论上现在应该有一个会话授权。

如果您不喜欢这种方式,您可以在您的应用程序中创建一个初始页面,用户可以在其中输入用户名和密码,获取输入内容,然后进行如下所示的 http 调用:

希望能有所帮助

此致,

有 API 显示基本身份验证 window / 尝试访问它们时出错,但实际上,通过一些身份验证 header 可以访问 - 有时完全定制。

与API所有者联系并询问,不与他们交谈就不会做任何事情。