Azure 应用注册客户端机密过期

Posted

技术标签:

【中文标题】Azure 应用注册客户端机密过期【英文标题】:Azure App registration Client secrets expiration 【发布时间】:2021-07-08 12:23:15 【问题描述】:

Microsoft 是否已将客户端机密的到期日期更改为最长 2 年?不能再选择“从不”了吗?

【问题讨论】:

我认为错误消息暗示不应再使用机密,而是应使用证书凭据:AADSTS7000222: The provided client secret keys are expired. Visit the Azure Portal to create new keys for your app, or consider using certificate credentials for added security 【参考方案1】:

Microsoft 是否已将客户端机密的到期日期更改为最长 2年?不能再选择“从不”了吗?

没错。客户端密钥的新到期期限最长为 2 年。

【讨论】:

感谢您的验证。我可以在任何地方阅读即将到来的 Azure 更新和更改吗? 对于 Azure AD,请参阅:docs.microsoft.com/en-us/azure/active-directory/fundamentals/… 我预计在两年内会有很多生产中断。这可能是“证书已过期”类问题的下一种形式:) @GauravMantri 我在您粘贴在这里的链接中找不到任何解释,也找不到 2021 年 4 月的任何更新。 @DanielJamesBryars ...我已就此联系过 Azure Identity 团队的一名成员。他们将是最好的回答者。【参考方案2】:

有人可以指出一个链接,为什么以及何时由微软强制执行?这并不是真正的安全最佳做法,可能会对正常工作的应用程序产生严重影响。

这不是可能泄露的密码暴露前端。有些秘密仅用于服务器后端,而且很复杂,至少有 20 个字符长。如今,任何蛮力都无法打破这些。 所以事实上,因为 Azure 上没有像证书那样的监控和警报,所以在 2 年内它已经成为 Azure 用户的噩梦。

【讨论】:

【参考方案3】:

我自己也遇到了这个问题。您可以设置使用超过 2 年的 Powershell 添加凭据。所以我猜这是一个 UI 限制。

$startDate = Get-Date
$endDate = $startDate.AddYears(98)
$aadAppsecret01 = New-AzureADApplicationPasswordCredential -ObjectId b09d3e1b-417d-425c-be05-9e46943d7207 -StartDate $startDate -EndDate $endDate

【讨论】:

我认为这是正确的答案。我只想指出,还有另一个参数可以给秘密命名:-CustomKeyIdentifier "clientSecret" -Value 是否用于为客户端密钥提供一个值,然后我们使用该值在 Azure 功能应用程序中进行身份验证(以及应用程序 ID)?【参考方案4】:

客户端密钥有效期限制为两年(24 个月)或更短。您不能指定超过 24 个月的自定义生命周期。 Microsoft 建议您将到期值设置为小于 12 个月

https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app#add-a-client-secret

【讨论】:

这个限制在前面2个答案中已经详述了。【参考方案5】:

您可以通过 Azure 内置 CLI 设置日期。 在浏览器中打开 Azure CLI。然后下面这个命令。注意:如果您没有传递密码,这将重置您现有的密码!结束日期是您想要的任何日期:

az ad sp credential reset --name name of your AD app --end-date 2035-03-04 --credential-description DescriptionHere

如果您想保留我需要的应用程序密码,我已经创建了密码并开始使用它,请确保传递现有密码。

az ad sp credential reset --name name of your AD app --password whatever password you want to keep --end-date 2035-03-04 --credential-description AppAccess

--credential-description 是可选的,但如果你不通过它,它会在 UI 上显示为空白,这不好。

更多信息: https://docs.microsoft.com/en-us/cli/azure/ad/app/credential?view=azure-cli-latest

【讨论】:

这些命令需要谨慎使用。如果您在应用程序中配置了多个机密,则除了您在 --password 参数中提到的机密之外,其他所有机密都将被删除。 感谢您了解这一点,好点子。就我而言,我只有一个,所以没有尝试多个。在任何情况下,使用 azure CLI 命令最好在生产环境之前进行测试。【参考方案6】:

看起来我们在 2021 年 6 月 8 日得到了微软团队的官方答复,根据这个讨论:https://docs.microsoft.com/en-us/answers/questions/422538/future-plans-of-microsoft-with-the-maximum-expirat.html

这是他们工程团队的最终答案:

有计划在行政上限制秘密的生命周期。但是,目前还没有关于何时会发生这种情况的时间表或预计到达时间。删除 UX 选项以使机密永不过期是该过程的第一步(您仍然可以使用 PowerShell、AZ CLI 和 Graph API 创建永不过期的机密)。

所以,我明白了,有一段时间,我可以使用 Daniel in the accepted answer above 建议的 PowerShell 方法。 但是,我们不能永远依赖这一点,因为如果微软的计划实现,“从不”选项迟早会完全消失。我希望在这种情况下不会。正如一些人所说,由于这个限制,我也预见到未来几年会出现到期问题。

【讨论】:

以上是关于Azure 应用注册客户端机密过期的主要内容,如果未能解决你的问题,请参考以下文章

Azure AD 应用程序注册中的 Client Secret 最长到期时间修改为 2 年

Azure AD,客户端机密应用程序调用具有自定义应用程序 ID URI 的 web api,返回 401

在 JwtBearerOptions 中为 Azure Active Directory 身份验证指定客户端机密

Android/IOS Secret 过期管理与客户端凭证流

将 appsettings.json 文件中的机密存储在 Azure Key Vault 上的 .Net 控制台应用程序中

Azure AD B2C:客户在兑换机密授权时必须发送 client_secret