【问题标题】:Uppercase username does not play nice with API Manager using curl大写用户名在使用 curl 的 API Manager 中效果不佳
【发布时间】:2014-05-06 12:28:55
【问题描述】:

我正在尝试使用 grant_type=password 和来自 wso2 API 管理器的 curl 请求访问令牌。但在我看来,每次我使用带有大写字母的用户名时,都会收到错误消息:{"error":"invalid_grant","error_description":"Provided Authorization Grant is invalid."}

当我使用不带小写字母的用户名时,我得到: {"token_type":"bearer","expires_in":3600,"refresh_token":"a819b019c4aa925f127788526bc13851","access_token":"6f760484acafdf03e8371825e3cb656"}

比较以下:

1.

curl -k -d "grant_type=password&username=david&password=Abc123&scope=PRODUCTION" -H "Authorization: Basic SlJXbVRoNmNaMDJGM1ZIYlZ6bW9XeUt0WnRJYTpnRVdzd2ZYTmJJMmJXUXc4ekJWVEw1b0VkU0Fh, Content-Type: application/x-www-form-urlencoded" https://localhost:9443/oauth2/token

2.

curl -k -d "grant_type=password&username=David&password=Abc123&scope=PRODUCTION" -H "Authorization: Basic V2ZsQnhGeDlFUzVwaVZuOXFEdlF5bWxuZEM4YTp4SnZNQTNCOHFud0N1MXZ1YTNvaGg3VF9mbkFh, Content-Type: application/x-www-form-urlencoded" https://localhost:9443/oauth2/token

两个用户: - 存在 - 可以登录到 localhost:9443/store/ - 已创建具有 API 订阅的应用程序

它们之间的唯一区别是 2. 有一个大写字母。所以我的问题是我做错了什么还是这是一个错误?

【问题讨论】:

    标签: curl wso2


    【解决方案1】:

    WSO2 OAuth 端点会降低用户名并尝试进行身份验证,因此,您会看到问题。 Sourcecode for OAuth endpoint - 检查用户名大小写降低的getAccessToken方法

    【讨论】:

    • 奇怪,我想会有更多人遇到同样的问题。感谢您的意见!
    • 是的,这很奇怪,我们花了一整天的时间才弄清楚发生了什么!
    【解决方案2】:

    是的。在认证之前将用户名小写是不正确的。但我想实际问题是您的用户存储确实支持区分大小写的用户名。通常用户存储如 LDAP、AD、JDBC 只支持不区分大小写的用户名。因此,您看不到任何问题。我希望您已将 APIM 用户存储配置到支持区分大小写的选择查询的数据库数据库(例如 H2 Oracle)中。因此,您可能会遇到此问题。在这种情况下,可以在用户存储配置中配置 SQL 查询,避免区分大小写选择

    <Property name="UserFilterSQL">SELECT UM_USER_NAME FROM UM_USER WHERE UPPER(UM_USER_NAME) LIKE UPPER(?) AND UM_TENANT_ID=? ORDER BY UM_USER_NAME</Property>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      相关资源
      最近更新 更多