簡體   English   中英

帶有Angular和反應式Spring Security的OAuth2

[英]OAuth2 with Angular and reactive Spring Security

我正在嘗試為我的Angular應用和Spring Webflux后端使用VK進行社交登錄。 目前,我在后端有一個端點可以提供用戶信息: localhost:8080/people/me 我嘗試通過以下方式在前端對用戶進行身份驗證:

ngOnInit(): void {
    this.http.get(USER_INFO_URL)
      .subscribe((resp: Response) => {
        if (resp.status < 300) {
          this.authenticated = true;
          resp.json()
            .then(vkUser => {
              let fields: [string, string] = ['firstName', vkUser.firstName];
              fields['lastName'] = vkUser.lastName;
              this.user = new User(vkUser.id, fields);
            });
        } else {
          window.location.href = AUTH_URL;
        }
      });
  }

但是,當我的Spring應用程序將客戶端重定向到VK進行身份驗證時, VK不提供任何CORS標頭,從而導致該機制失敗。

有人可以推薦一種對角/彈簧對使用OAuth2的方法嗎? 我正在使用code流,所以我想首先我需要在前端獲取代碼,然后將其發送到Spring后端,以便對其進行更改以獲取訪問令牌。

同時,我覺得我的方法可能是錯誤的,整個身份驗證過程應該在后端進行,而前端應該只獲得一個cookie,但是我不知道如何從前端重定向AJAX請求到VK登錄頁面,在后端進行處理,然后返回Angular應用。

如果不配置某些第三方軟件(將啟用來自您網站的跨源請求),或者將服務器端API代碼添加到您的應用中以完成登錄過程,則將無法實現。

正如我們在評論中指出的那樣,您已經在兩個請求周期內成功完成了登錄流程。 您可以使用相同的流程來獲取有效的會話,然后重定向到您的單頁應用程序。 該cookie應該設置為僅HTTP cookie(以防止其他JavaScript劫持它),但這將使您能夠針對服務器發出請求,而不會成功添加其他身份驗證參數。 在為API請求提供服務時,您將必須檢查該cookie,並編寫處理代碼以提示用戶登錄(如果cookie不存在或不再有效)。

希望有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM