首页 文章

大写的用户名与使用curl的API Manager不兼容

提问于
浏览
1

我正在尝试使用来自wso2 API Manager的curl使用grant_type = password来获取访问令牌 . 但在我看来,每次我使用带有大写字母的用户名时,我都会收到错误:{“error”:“invalid_grant”,“error_description”:“提供的授权授予无效 . ”}

当我使用小写字母的用户名时,我得到:{“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.有一个大写字母 . 所以我的问题是我做错了什么或这是一个错误?

2 回答

  • 1

    WSO2 OAuth endpoints 会降低用户名并尝试进行身份验证,因此您会看到此问题 . Sourcecode for OAuth endpoint - 检查降低用户名案例的getAccessToken方法

  • 3

    是 . 在验证之前将用户名小写为小写是不正确的 . 但我想实际问题是您的用户存储确实支持前缀区分大小写的用户名 . 通常,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>

相关问题