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

时间:2014-05-06 12:28:56

标签: curl wso2

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

当我使用小写字母的用户名时,我得到: {" token_type":"承载"" expires_in":3600," refresh_token":" a819b019c4aa925f127788526bc13851"&# 34;&的access_token#34;:" 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 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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