【问题标题】:Time base user account expiration时基用户帐户到期
【发布时间】:2016-09-16 04:54:20
【问题描述】:

我们正在使用 CloudFoundry UAA 进行用户身份验证和授权。据我了解,我们可以将用户设置为活动和非活动。但是我们需要在给定时间后使用户帐户过期。我们如何实现时基用户帐户使用 UAA 过期?

【问题讨论】:

    标签: cloudfoundry-uaa


    【解决方案1】:

    这可能不是您要查找的内容,但您可以为此目的使用密码过期功能。它允许为属于特定区域的所有用户设置一个月的到期时间,这意味着最小的时间段是一个月。

    如果您向自己展示该区域的身份提供者,您会在配置中找到 ‘expirePasswordInMonths’ 属性:

    {
      "type": "uaa",
      "config": "{\"emailDomain\":null,\"additionalConfiguration\":null,\"providerDescription\":null,\"passwordPolicy\":{\"minLength\":0,\"maxLength\":255,\"requireUpperCaseCharacter\":0,\"requireLowerCaseCharacter\":0,\"requireDigit\":0,\"requireSpecialCharacter\":0,\"expirePasswordInMonths\":1},\"lockoutPolicy\":{\"lockoutPeriodSeconds\":300,\"lockoutAfterFailures\":5,\"countFailuresWithin\":3600},\"disableInternalUserManagement\":false}",
      "id": "fe5d0b8d-4d65-4090-b65a-3c17682bec7e",
      "originKey": "uaa",
      "name": "uaa",
      "version": 2,
      "created": 946684800000,
      "last_modified": 1473569982108,
      "active": true,
      "identityZoneId": "uaa"
    }
    

    这是需要更改的属性。但令人惊讶的是,到达那里并不容易。

    首先,您必须获得具有两个附加范围的访问令牌:“zones.read”和“zones.{zone id}.admin”,其中 {zone id} 是区域的名称 - 默认为“uaa” .

    例如,如果您在名为“admin”的客户端上使用 uaac,您可以通过以下方式添加范围:

    $ uaac client update admin --authorities "EXISTING-PERMISSIONS zones.read zones.uaa.admin"
    

    更改权限后记得更新访问令牌:

    $ uaac token client get admin -s <password_here>
    

    一旦我们拥有所有必需的权限,我们就可以使用“curl”子命令更新密码策略:

    uaac curl -k /identity-providers/fe5d0b8d-4d65-4090-b65a-3c17682bec7e -X PUT -H "Content-Type: application/json" \
      -d '{  "type": "uaa",  "config": "{\"emailDomain\":null,\"additionalConfiguration\":null,\"providerDescription\":null,\"passwordPolicy\":{\"minLength\":0,\"maxLength\":255,\"requireUpperCaseCharacter\":0,\"requireLowerCaseCharacter\":0,\"requireDigit\":0,\"requireSpecialCharacter\":0,\"expirePasswordInMonths\":1},\"lockoutPolicy\":{\"lockoutPeriodSeconds\":300,\"lockoutAfterFailures\":5,\"countFailuresWithin\":3600},\"disableInternalUserManagement\":false}",  "id": "fe5d0b8d-4d65-4090-b65a-3c17682bec7e",  "originKey": "uaa",  "name": "uaa",  "version": 2,  "created": 946684800000,  "last_modified": 1473569982108,  "active": true,  "identityZoneId": "uaa"}'
    

    我知道,这有点麻烦,这可能就是为什么在 Pivotal 的 Cloudfoundry 版本中,您会获得一个用于管理密码策略的不错的 Web 表单:

    https://docs.pivotal.io/pivotalcf/1-7/opsguide/pw-policy.html

    请记住,此功能仅在使用 “内部” 身份提供程序时可用。另一方面,如果您的 UAA 依赖于 LDAP 等外部身份验证源,您可能需要使用特定于该外部系统的另一种机制。

    更多关于 UAA 文档中身份提供者管理的信息:

    https://github.com/cloudfoundry/uaa/blob/master/docs/UAA-APIs.rst#identity-provider-api-identity-providers

    【讨论】:

    • 非常感谢您的回复。这对我们在几个月内使用户过期非常有帮助。但我们也需要在几小时或几天内禁用用户帐户,例如3 小时、15 天等。似乎我们无法通过“expirepasswordinmonths”来实现。您能否指导我们如何实现它?我们需要在 UAA 中编写自定义代码吗?
    猜你喜欢
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 2021-11-30
    • 1970-01-01
    相关资源
    最近更新 更多