wso2 - 如何使用外部身份提供者对 API 进行身份验证?
问题描述
我在同一台机器上有以下设置:
- WSO2-AM
- WSO2-IM-KM(身份管理器作为密钥管理器)
身份管理器将身份验证联合到外部 OpenID 身份提供者。
到目前为止我所做的:
- 在两个组件之间共享数据库
- 让 WSO2-AM 将身份验证委托给 WSO2-IM-KM
- 将外部提供者配置为生成的服务提供者(在 WSO2-AM 商店中创建应用程序时在 WSO2-IM-KM 中生成)
当前行为:
- 我可以通过调用以下 URL 获取授权码:https://my.site:9444/oauth2/authorize?response_type=code&client_id=pkYcC4xFQ1jt6dQbdZAe6savv4oa&scope=phone+email+address+openid+profile&redirect_uri=https://my.site: 9443/store/jagg/jaggery_oidc_acs.jag&nonce=3734e7d4c22f1&state=128d20e14c884,认证成功,然后
jaggery_oidc_acs.jag
端点失败 - 由于
jaggery_oidc_acs.jag
端点失败,我手动将它检索code
到POST
https://my.site:8243/token ,它返回我 anaccess_token
, arefresh_token
和 anid_token
我的问题:
- 我应该如何自动化我之前描述的手动步骤?我是否负责创建一个专用端点来执行此操作,以防止
authorization_code
客户端混淆,或者 WSO2 中是否有内置端点?如果合适,这个端点是什么? - 是否有生成
oauth2/authorize
URL 的端点?
经过进一步研究:
我发现以下文档https://docs.wso2.com/display/IS540/Authorization+Code+Grant似乎表明我需要一个“客户端”,但我没有,我只需要我的 API与外部身份提供者进行身份验证。
解决方案
回答问题01
如果你想使用授权码授权类型来获取访问令牌,肯定应该有一个回调 URL 来获取授权码。如果您的回调 URL 是真实的,则无需执行任何手动步骤,只需从发送到回调 URL 的请求查询参数中检索授权代码即可。您可以从 Playground2 示例应用程序 [1] 检查此行为,其中回调 URL 为http://localhost:8080/playground2/oauth2client。
回答问题 02
请检查 identity.xml 中的 OAuth2AuthzEPUrl 标记
[1] https://docs.wso2.com/display/IS570/Setting+Up+the+Sample+Webapp
推荐阅读
- javascript - 从 ashx 文件上传中取回重复数据
- node.js - 如何修复错误 Jest 检测到以下 3 个打开的句柄可能会阻止 Jest 退出
- swift - 我如何限制 NSColorWell 的颜色
- java - Cucumber-Java - 挂钩类 - 退出驱动程序方法不起作用
- python - 根据另一个列表的排序方式对列表进行排序。蟒蛇 3
- visual-studio - 如何在 Visual Studio 中发布 3 层 MVC 应用程序?
- java - 带有 java servlet 的 CRUD json 文件
- swift - 如何从mapkit获取地名
- php - 我需要在 SQL 中加入哪些基于来自不同表的 ID 的类别名称?
- apache - 访问禁用 ssl 的域的 https 版本会显示不同的页面