WSO2具有多个租户的身份服务器并配置应用程序

时间:2017-03-31 06:35:14

标签: wso2 wso2is

我在WSO2身份服务器(5.3)中配置了两个租户。

mydomain.com-->tenant1
mydomain2.com--->tenant22

每个租户都配置了几个用户。在Tenant1(我的domain.com)中,我在服务提供商下添加了应用程序。 注意:未选中Saas复选框。

我尝试通过clientCredential和密码授予类型生成OAuth访问令牌。我面临以下问题。

  1. 客户端凭据授予:
  2. 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
    
    1. 密码授予

      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

    2. 此处用户名和密码属于租户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
      

      任何人都可以告诉我在这里错过了什么吗?我希望我的应用程序是特定于租户的。

      感谢 拉马

1 个答案:

答案 0 :(得分:0)

这两种情况可以描述如下。

  1. 在客户端凭据授予类型中,令牌端点必须从您发送的客户端ID值(而不是查询参数)计算租户域信息。当您发送客户端凭据授予令牌请求时,WSO2 Identity Server提取授权标头,获取客户端Id值并查找应用程序。由于客户端ID和机密值有效,因此它将返回令牌。

  2. 当您尝试提供用户名和密码的密码授予类型时,Identity Server首先验证用户租户域。当您提供没有租户域信息的用户名时,Identity Server将采用超级租户域(carbon.super)并检查它是否与Oauth应用程序租户域匹配(应用程序由客户端ID进行身份验证)。您会收到错误,因为这两个属性不同。如果您的用户名参数也包含租户域,则此方案应该可以正常工作。

  3. 假设您在mydomain.com中拥有用户名为user1的用户。将 user1@mydomain.com 作为密码授予令牌请求中的用户名参数值。然后它应该返回令牌。