java - 暴露客户端 secret 是否会对 oauth 2 中的隐式授权类型构成威胁?

标签 java angular spring-boot spring-security-oauth2

我有一个应用程序需要实现 oauth 2 以保护 REST API 的安全。简单的流程是当用户登录时,他们应该有权访问一些 protected 资源(根据他们的 Angular 色)。

我将使用 Angular 7 作为前端。

根据此图,我需要对单页应用程序使用隐式授予。 enter image description here 现在我继续搜索,发现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/

相关文章:

mysql - spring jpa数据原生Sql查询的问题

java - ListView 滚动时隐藏搜索栏

Angular 2 音频不会因更改组件而中断

Angular NG 命令给出权限错误

java - 从 ApplicationListener 关闭 spring 应用程序

java - 创建还包含 Sleuth 依赖项的 Spring Boot 管理服务器

java - 我这样做正确吗?

java - 在 Java 中处理重复的正则表达式组名称(C# 翻译)

java - "Implicit wait"等待元素可点击、显示或可见

angularjs - Angular2 - 指令选择器上的 ngclass