【问题标题】:Using an external OpenID Connect Identity Provider for WSO2 Store access使用外部 OpenID Connect 身份提供程序进行 WSO2 存储访问
【发布时间】:2019-06-12 22:02:24
【问题描述】:

我正在设置 WSO2 API 管理器的实例,并希望通过将其链接到我现有的 OpenID Connect 身份服务器 (OpenAM) 来让开发人员访问 API“存储”页面。我已将 OIDC 配置添加到存储配置文件 (wso2am-2.6.0/repository/deployment/server/jaggeryapps/store/site/conf/site.json) 中,其中包含授权、令牌、用户信息端点等。

当用户在商店中单击登录时,它会正确地将他们重定向到 OpenAM 进行登录,并将访问令牌传回商店应用程序。我还确保从 userinfo 端点(如首选用户名)返回一些必需的声明。例如,我还返回了一个“组”声明,其中列出了用户应该在“订阅者”中的组。

我从 userinfo 返回的声明是:

{  
   "address":{  
      "formatted":"My House"
   },
   "given_name":"Danny",
   "family_name":"Developer",
   "name":"Danny Developer",
   "preferred_username":"Danny Developer",
   "groups":[  
      "subscriber"
   ],
   "email":"adam.hatherly@nhs.net",
   "sub":"developer1"
}

但是,无论我尝试使用声明和组名,商店仍然会给出错误消息“不允许用户登录商店。”。我假设我需要在访问令牌或 userinfo 端点中添加其他内容 声明列表以使商店应用程序接受用户,或者商店或碳控制台中的一些其他配置?

【问题讨论】:

  • 请求中是否包含“openid”范围?
  • 是的 - 它正在请求 openid 范围。所有的 oidc 调用似乎都正常工作(auth、token、userinfo)——只是在进程结束时商店应用程序说不允许用户。

标签: wso2-am openid-connect


【解决方案1】:

用户登录问题的原因是用户没有登录商店的相关权限。用户需要分配给它的内部/订阅者角色。由于用户来自 OpenAM 并且 APIM 没有任何信息来授权它,因此登录失败。

为此,您应该与 APIM 共享用户 OpenAM 用户存储(例如共享 LDAP)并为用户分配内部/订阅者角色,或者使用自定义代码将用户添加到 APIM 用户存储并分配角色。

另一个最简单的选择是在 APIM 端创建一个具有订阅者角色的用户(添加一个虚拟密码)。但如果您不了解所有用户,这不是一个合适的解决方案

【讨论】:

  • 这真的很有用,我怀疑可能是这样,谢谢!我将研究我可能需要在哪里添加一些自定义代码来执行此操作(在我的情况下,预先创建用户或与后端 LDAP 集成是不切实际的)。
  • 您可以在两个地方添加自定义代码。进入存储库/部署/服务器/jaggeryapps/store/jagg/jaggery_oidc_acs.jag 文件或覆盖 /modules/oidc/module.xml 中的 oidc 模块
猜你喜欢
  • 2013-06-07
  • 2016-12-18
  • 2017-10-14
  • 2013-06-11
  • 2017-12-12
  • 2014-08-25
  • 1970-01-01
  • 2021-07-29
  • 2019-02-25
相关资源
最近更新 更多