问题描述
我正在开发一组通过WSO2 API管理器公开为REST的微服务。
现在,我想在Angular前端中调用这些服务。处理用户身份验证和授权的最佳方法是什么?
我发现可以通过here中所述的OAuth2密码授予来做到这一点?
用户登录时,用户凭据将发送到特定的WSO2 APIM端点(/令牌),它会进行验证,生成令牌,并且此令牌将在标头中发送以供后续调用。
这是处理此案的最佳方法吗?
预先感谢
解决方法
如您的问题所述,https://apim.docs.wso2.com/en/next/learn/api-security/oauth2/grant-types/password-grant/ 仅当您拥有资源所有者的用户名和密码时,此方法才有效。
以一个示例为例,假设您已经发布了API并在WSO2存储中创建了一个用户(资源所有者)。该用户使用该应用程序订阅了API。该应用程序将具有一个客户端ID和密码,用于生成OAuth2.0令牌。该令牌将用于调用API。
现在在您的角度项目中,一种方法是硬编码 base64(clientid:clientsecret)并调用令牌API来生成OAuth2.0承载令牌。使用生成的令牌来调用WSO2上内置的API。为了保护您的API免受攻击,请使用基于IP的速率限制
现在采取另一种情况,如果您希望用户首先进行身份验证,然后使用密码授予类型(使用实际用户的用户名和密码)为该用户生成JWT token
,然后使用该JWT生成{{ 1}},将用于调用这些API。
针对第二种情况要执行的步骤:
-
在注册过程中(来自Angular),
- 在内部WSO2 Identity Server中。 (有相同的WSO2 API)
- 注册后,通过验证用户名和密码从身份服务器生成JWT令牌。 (同样,WSO2 API也存在)
- 现在使用此JWT令牌,从WSO2 APIM生成OAuth2.0令牌
- 使用此令牌来调用API
第二种方法是用户使用WSO2作为网关进行身份验证和授权的理想方法,而第一种方法则主要关注服务到服务的身份验证和授权。
希望这能回答您的问题