我在WSO2身份服务器(5.3)中配置了两个租户。
mydomain.com-->tenant1
mydomain2.com--->tenant22
每个租户都配置了几个用户。在Tenant1(我的domain.com)中,我在服务提供商下添加了应用程序。 注意:未选中Saas复选框。
我尝试通过clientCredential和密码授予类型生成OAuth访问令牌。我面临以下问题。
curl -u LdTubNF7u1pxTeWa98Q46K2vqhUa:clx4UTH1h2DdXuSMhzWrfXPSBJga -k -d" grant_type = client_credentials" -H"内容类型:application / x-www-form-urlencoded" http://10.37.2.XX:9763/oauth2/token
这会为我生成令牌。理想情况下,应该为特定租户配置应用程序时失败。我尝试通过传递一些未列出的域名仍然可以访问它。 例如
curl -u LdTubNF7u1pxTeWa98Q46K2vqhUa:clx4UTH1h2DdXuSMhzWrfXPSBJga -k -d "grant_type=client_credentials" -H "Content-Type:application/x-www-form-urlencoded" http://10.37.2.XX:9763/oauth2/token?tenantDomain=mytrail.com
密码授予
curl -v -X POST -H"授权:基本TGRUdWJORjd1MXB4VGVXYTk4UTQ2SzJ2cWhVYTpjbHg0VVRIMWgyRGRYdVNNaHpXcmZYUFNCSmdh" -k -d" grant_type = password& username = xxx& password = xxxx" -H"内容类型:application / x-www-form-urlencoded" http://10.37.2.xx:9763/oauth2/token
此处用户名和密码属于租户mydomain.com,我收到以下错误。
[2017-03-31 01:45:33,420] DEBUG {org.wso2.carbon.identity.oauth2.token.handlers.grant.PasswordGrantHandler} - Non-SaaS service provider tenant domain is not same as user tenant domain; mydomain.com != carbon.super
[2017-03-31 01:45:33,420] DEBUG {org.wso2.carbon.identity.oauth2.token.AccessTokenIssuer} - Invalid Grant provided by the client Id: LdTubNF7u1pxTeWa98Q46K2vqhUa
任何人都可以告诉我在这里错过了什么吗?我希望我的应用程序是特定于租户的。
感谢 拉马
答案 0 :(得分:0)
这两种情况可以描述如下。
在客户端凭据授予类型中,令牌端点必须从您发送的客户端ID值(而不是查询参数)计算租户域信息。当您发送客户端凭据授予令牌请求时,WSO2 Identity Server提取授权标头,获取客户端Id值并查找应用程序。由于客户端ID和机密值有效,因此它将返回令牌。
当您尝试提供用户名和密码的密码授予类型时,Identity Server首先验证用户租户域。当您提供没有租户域信息的用户名时,Identity Server将采用超级租户域(carbon.super)并检查它是否与Oauth应用程序租户域匹配(应用程序由客户端ID进行身份验证)。您会收到错误,因为这两个属性不同。如果您的用户名参数也包含租户域,则此方案应该可以正常工作。
假设您在mydomain.com中拥有用户名为user1的用户。将 user1@mydomain.com 作为密码授予令牌请求中的用户名参数值。然后它应该返回令牌。