如何使用 Angular 2 进行 oAuth2 基本身份验证?

Posted

技术标签:

【中文标题】如何使用 Angular 2 进行 oAuth2 基本身份验证?【英文标题】:How to do oAuth2 Basic authentication with angular 2? 【发布时间】:2018-02-08 22:10:09 【问题描述】:

我正在使用角度 2 进行 oauth2。

这里是 POST URL = "http://localhost:8080/OAuth2Example/oauth/token?grant_type=password&username=bill&password=abc123"。

如何使用经过验证的用户之一在前端传递 clientId 和客户端密码并获取访问令牌?

如果在 angular2 或任何配置中有任何插件可用,请建议我!

我试过了,

private getHeaders()
    // I included these headers because otherwise FireFox
    // will request text/html
    let headers = new Headers();
    let auth_data = 'username=my-trusted-client&password=secret';
    headers.append('Accept', 'application/json');
    headers.append('Authorization', auth_data);
    return headers;
  

  testRequest() 
     let data = 'grant_type=password&username=bill&password=abc123';
     let postResponse = this.http
      .post(`$this.baseUrl/oauth/token?`, data, headers: 
         this.getHeaders())
       .toPromise()
      .then(this.mapResult);
     return postResponse;

当我执行 Post 调用时,

XMLHttpRequest 无法加载 http://localhost:8080/OAuth2Example/oauth/token?/。 对预检请求的响应未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:4200” 使用权。响应的 HTTP 状态代码为 401。

我在控制台看到的这个错误。

我有一个邮递员集合快照来快速确定我需要什么,我从邮递员那里获得了 oauth2,如下所示。

这正是我需要从 angular 2 中获取的。

谢谢,

【问题讨论】:

http://localhost:8080/SpringSecurityOAuth2Example/oauth/token?/ 是实际显示的文字路径吗?因为token?/ 部分看起来像是一个错误。它也完全不匹配问题中显示的http.get 请求代码。并且该请求代码与问题开头显示的“POST URL”不匹配。所以很难弄清楚这里可能发生了什么,但无论如何,如果您发送该请求的服务器使用 401 响应该路径的 OPTIONS 请求,那么您将无法让浏览器甚至尝试该 POST 请求 无论如何要清楚,因为您的请求添加了一个 Authorization 标头,它会触发您的浏览器在尝试从您的代码中进行 POST 之前自动执行 CORS 预检 OPTIONS 请求。并且错误消息表明预检失败,因为对 OPTIONS 请求的响应是 401 而不是浏览器需要看到的 200 OK 或 204 才能认为预检成功。 Auth0 有一个非常好的分步文档来执行此操作和其他内容,在搜索第三方插件之前绝对需要阅读:auth0.com/blog/angular-2-authentication、auth0.com/docs/quickstart/spa/angular2/01-login、auth0.com/docs/quickstart/spa/angular2/01-login 试试.post(`$this.baseUrl/oauth/token`, data, headers: this.getHeaders())。即从请求 URL 的末尾删除? 事情是我需要设置授权标头与客户端密码和用户名。稍后我需要使用用户的凭据登录。这正是我需要的。如果您阅读了正确的 oauth2 结构以与我分享 angular2,那么上述操作对我不起作用。 【参考方案1】:

如果任何插件在 angular2 或任何配置中可用,请 建议我!

当您要求 angular 2 时,有很多不同平台的示例,您可以点击此链接,该链接对我有用 LINK

你的例外看起来像关于 cors。

【讨论】:

正在寻找插件。 你浏览完整页了吗? 是的.. 他们谈论 JWT 令牌.. 但这里的问题是 oauth2 令牌。

以上是关于如何使用 Angular 2 进行 oAuth2 基本身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Angular 2 发送 OAuth2 的客户端 ID 和秘密 ID?

如何使用 Spring Boot + Angular 处理外部 OAuth2 身份验证

Angular 5 + OAuth2:未使用库设置令牌 [angular-oauth2-oidc]

如何使用 typescript/angular 正确构建 OAuth2 GET 请求?

无法在Angular / SpringBoot应用程序中获取OAuth2令牌

如何使用 Angular -> Spring Boot Oauth2 -> Keycloak 获取 keycloak 令牌