我有一个应用程序需要实现 oauth 2 以保护 REST API 的安全。简单的流程是当用户登录时,他们应该有权访问一些 protected 资源(根据他们的 Angular 色)。
我将使用 Angular 7 作为前端。
根据此图,我需要对单页应用程序使用隐式授予。 现在我继续搜索,发现https://www.devglan.com/spring-security/spring-boot-oauth2-angular
API Name - Login
Method - POST
URL - oauth/login
Header - 'Authorization': 'Basic ' + btoa('devglan-client:devglan-secret')
Body - {'username' :'admin ',
'password' :'admin',
'grant_type': 'password' }
Content-type: application/x-www-form-urlencoded
现在我对这种方法唯一关心的是。
我。为什么这个客户端 ID 和客户端 secret 会在 Angular 代码中泄露?客户 secret 不应该保密吗?
最佳答案
我们不需要任何 key 来在 js 应用程序中实现隐式授权流程。
您可以看到以下 http url 示例,它需要一些信息,例如 client_id、redirect_uri 等。
我们将在redirect_uri的url片段中获取访问 token ,并且该 token 对您进行身份验证以访问 protected 资源。然而,范围参数对于确定资源及其权利也很重要。
Http 请求 URI
https://YOUR_AUTH0_DOMAIN/authorize?
audience=YOUR_API_AUDIENCE&
scope=YOUR_SCOPE&
response_type=YOUR_RESPONSE_TYPE&
client_id=YOUR_CLIENT_ID&
redirect_uri=https://YOUR_APP/callback&
nonce=YOUR_CRYPTOGRAPHIC_NONCE&
state=YOUR_OPAQUE_VALUE
即使对于 js 应用程序,我也强烈建议使用 PKCE 的授权代码授予,因为访问 token 容易受到各种安全风险的影响。使用 PKCE,攻击者需要解决难题(代码挑战)才能获得访问 token 。
关于java - 暴露客户端 secret 是否会对 oauth 2 中的隐式授权类型构成威胁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54273257/