WSO2 API管理器-从API客户端验证用户

问题描述

我正在开发一组通过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),
  1. 在内部WSO2 Identity Server中。 (有相同的WSO2 API)
  2. 注册后,通过验证用户名和密码从身份服务器生成JWT令牌。 (同样,WSO2 API也存在)
  3. 现在使用此JWT令牌,从WSO2 APIM生成OAuth2.0令牌
  4. 使用此令牌来调用API

第二种方法是用户使用WSO2作为网关进行身份验证和授权的理想方法,而第一种方法则主要关注服务到服务的身份验证和授权。

希望这能回答您的问题

参考链接:https://medium.com/wso2-learning/how-to-protect-your-apis-with-self-contained-access-token-jwt-using-wso2-api-manager-and-wso2-75673d8a4686