Azure Active Directory 中的可配置令牌生命周期

Configurable token lifetimes in Azure Active Directory

我无法从 PowerShell 分配 TokenLifetimePolicy Azure AD 应用程序策略。我有一个错误 BadRequestMessage: Open navigation properties are not supported on OpenTypes.Property name: 'policies

我正在尝试从 Configurable token lifetimes in Azure Active Directory

实施令牌到期时间

请参阅下面的屏幕截图,欢迎提供有关 AzureAD cmdlet Add-AzureADApplicationPolicy 的任何有用链接和解决方案

应用程序是在 B2C 门户中创建的吗?

假设答案是肯定的,这种行为是意料之中的: Microsoft 有 2 个授权端点,V1 和 V2。

B2C 门户创建 V2 应用程序。 powershell 的令牌生命周期设置可能只适用于 V1 应用程序。

b2c 上有设置 blade 可以更改此设置。

另一种选择是从 Azure 活动目录 blade(相对于 b2c blade)创建应用程序。然后您可以使用 powershell 设置令牌生命周期。

我通过仅使用 New-AzureADPolicy cmdlet 并设置 -IsOrganizationDefault $true 而不是 $false 使其工作。效果需要一段时间才能看到。所以等待大约30分钟到一个小时(我不知道具体多长时间)。之后,您的新策略将被创建并应用。另请记住,这是 PowerShell,因此 cmdlet 中没有空格。

示例:

New-AzureADPolicy -Definition @('{"TokenLifetimePolicy":{"Version":1,"AccessTokenLifetime":"02:00:00","MaxInactiveTime":"02:00:00","MaxAgeSessionSingleFactor":"02:00:00"}}') -DisplayName "PolicyScenario" -IsOrganizationDefault $true -Type "TokenLifetimePolicy"

多行版本:

New-AzureADPolicy -Definition @(
    '
        {
            "TokenLifetimePolicy":
                {
                    "Version": 1,
                    "AccessTokenLifetime": "02:00:00",
                    "MaxInactiveTime": "02:00:00",
                    "MaxAgeSessionSingleFactor": "02:00:00"
                }
        }
    '
    ) -DisplayName "PolicyScenario" -IsOrganizationDefault $true -Type "TokenLifetimePolicy"

Microsoft 可能会修复 IsOrganizationDefault $true 的问题。在问题中阅读更多相关信息:Azure AD Configurable Token Lifetimes not being Applied.

我为我的客户对此做了很多测试。由于没有使用最新版本的 PowerShell,我 运行 时不时地遇到这样的问题。

get-module

目前 AzureADPreview (V2) 的最新版本 2.0.0.114 Instructions to download here

正如 Seth 指出的那样,-IsOrganizationDefault $true 存在问题。

我发现的另一个问题是您的系统上有多个版本的 PowerShell,它正在加载没有更新位的错误版本。我上周五遇到了这个 - 我不得不擦除所有内容并重新安装 - 然后它修复了它。

还有 -

有区别:

Add-AzureADApplicationPolicy

Add-AzureADServicePrincipalPolicy

一个用于应用程序对象,另一个用于 ServicePrincipal。如果您将它应用于一个基于 SAML 的应用程序,那么您应该将它应用于 ServicePrincpal。

注意:应用对象和servicePrincipal对象有不同的ObjectID。不要把这些搞混了。对于实验,运行 针对您的应用程序的两个 cmd:

Get-AzureADServicePrincipal -SearchString <name of app>
Get-AzureADApplication -SearchString <name of app>

如果您抓错了 ObjectID - 去应用策略时不去

这些策略的顺序是:ServicePrincipal -> Application -> Tenant(组织)