【问题标题】:Allow application access to Azure AD protected URL without username/password允许应用程序在没有用户名/密码的情况下访问受 Azure AD 保护的 URL
【发布时间】:2019-03-28 20:55:09
【问题描述】:

从没想过我会遇到太多文档的问题!我需要帮助来挑选正确的信息,这样我才能阅读、理解并遵循它。

我的场景:

我有一个托管在 mywebapp.azurewebsites.net 上的 ASP .NET Web 应用程序 该网络应用在 mywebapp.azurewebsites.net/api/v1/dostuff/1 处具有完整的 REST API

您可以访问该站点并执行所有 CRUD 内容。您也可以使用桌面应用程序来做同样的事情。

我继续在 Azure 门户中启用了 Azure AD 身份验证。现在为了在网站上做任何事情,用户需要登录。它会弹出通常的 Microsoft 登录弹出窗口,然后在成功验证后重定向回网站。

但对于桌面应用程序,我希望用户无需登录即可使用它。不知何故,我的桌面应用程序需要能够调用 API/网站并进行身份验证!

此时,如果我需要在清单文件、Web 应用程序或其他地方做些什么,我会迷失方向吗?

我能做的大部分事情是使用客户端凭据/客户端密码获取访问令牌。

我只需要知道我想要实现的目标是否可行,以及哪个文档解释了这样做的方法。

【问题讨论】:

  • 最终按照答案的建议去做。在 Web 应用程序上,我创建了另一个控制器 (APIController),它仅公开对 Get 请求的匿名访问(无论如何我的桌面客户端都需要)。这样实际网站及其功能需要用户登录,但桌面可以执行某些匿名 API 调用。

标签: asp.net azure adal


【解决方案1】:

您遇到的根本问题是桌面应用程序(与任何公共客户端一样)无法以安全的方式向 AAD 进行身份验证。

您不能使用客户端密码。 从可执行文件中获取秘密非常容易,这基本上就是您应用的密码。

您必须让 API 接受几乎没有身份验证的调用。

如果访问 API 需要身份验证, 那么用户必须在应用中进行身份验证。

【讨论】:

  • 这是有道理的。我记得读过您不应该将客户端密码放入代码中。这就是为什么我不想只将用户名/密码放在代码中的原因。有没有办法做你所说的,只允许对 API 的匿名访问?我想这将是在某些页面上放置 [Authorize (roles)] 标签,但让 API 允许匿名的问题?
  • 作为后续行动......您说“无法以安全的方式向 AAD 进行身份验证。”但是不安全的方式呢?我想从代码中获取客户端机密应该比仅查看网络流量并获取本来可以匿名访问的 API 链接更难。我的问题是,即使使用邮递员并使用客户端密码,我得到的 JWT 似乎也没有任何角色或权限来访问任何内容。
  • 是的,所以在实践中威胁有点不同,但从安全角度来看,使用来自不受信任系统的秘密基本上与密钥已经泄露或不需要密钥相同一点也不。不包含权限的 JWT 是一个单独的问题。您可以为此打开一个新问题,并详细说明您如何配置应用程序和 API,并显示您用于获取令牌的代码。
猜你喜欢
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
  • 2018-08-03
  • 2018-11-27
相关资源
最近更新 更多