gdg-nara / mierukun

授業見取りツール
https://gdg-nara.github.io/mierukun/
GNU General Public License v3.0
2 stars 1 forks source link

OAuth クライアント用のライブラリの検討 #10

Closed t-cool closed 1 year ago

t-cool commented 1 year ago

chatGP で調べました。

angular-oauth2-oidc を利用して、利用者がログインしている Google アカウントの Google ドライブに、拡張機能から出力された csv データを保存するコードを書いてください。

以下は、Angular アプリケーションから Google Drive API を呼び出し、利用者がログインしている Google アカウントの Google ドライブに CSV データを保存するための angular-oauth2-oidc の例コードです。このコードは一般的なフローを示すものであり、実際のアプリケーションに合わせて多少の修正が必要かもしれません。

  1. angular-oauth2-oidc ライブラリをインストールします。
npm install angular-oauth2-oidc
  1. Google API Console で Google Drive API を有効化し、クライアント ID を取得します。

  2. Angular アプリケーションのモジュールに OAuthModule をインポートします。

import { OAuthModule, OAuthStorage } from 'angular-oauth2-oidc';

@NgModule({
  imports: [
    OAuthModule.forRoot({
      storage: localStorage,
      clientId: 'your-client-id'
    })
  ],
  ...
})
export class AppModule { }
  1. Angular アプリケーションのコンポーネント内で、Google アカウントに対して OAuth 2.0 認証を実行します。
import { OAuthService } from 'angular-oauth2-oidc';

@Component({
  ...
})
export class AppComponent {
  constructor(private oauthService: OAuthService) {
    this.oauthService.configure({
      clientId: 'your-client-id',
      scope: 'https://www.googleapis.com/auth/drive'
    });
    this.oauthService.tryLogin();
  }
}
  1. 認証された状態で Google Drive API を呼び出して、CSV データを Google ドライブ上に保存します。
import { HttpClient } from '@angular/common/http';

@Component({
  ...
})
export class AppComponent {
  constructor(private http: HttpClient, private oauthService: OAuthService) {
    ...
  }

  saveToGoogleDrive(data: string) {
    const headers = {
      Authorization: `Bearer ${this.oauthService.getAccessToken()}`
    };

    const file = new Blob([data], { type: 'text/csv' });
    const fileContent = new File([file], 'data.csv');

    const formData = new FormData();
    formData.append('file', fileContent);
t-cool commented 1 year ago

上記の「Angular アプリケーションのコンポーネント内で、Google アカウントに対して OAuth 2.0 認証を実行します。」では、それぞれのユーザは、各自のアカウントに認証をすることになりますか?

はい、それぞれのユーザは各自の Google アカウントに対して OAuth 2.0 認証を実行することになります。

Angular アプリケーション内で、OAuthService クラスを使用して Google アカウントに対して OAuth 2.0 認証を実行すると、ユーザは Google アカウントにログインしている状態で認証を実行するよう求められます。ユーザが認証を完了すると、Angular アプリケーションは Google Drive API にアクセスするためのアクセストークンを取得することができます。

これにより、各ユーザは自分自身の Google アカウントに対して認証を実行することができます。また、各ユーザが保存するデータは、各自の Google ドライブ内に保存されます。

t-cool commented 1 year ago

クライアント ID は、開発者のものを1つ利用しますか?それとも、拡張機能の利用者がそれぞれ用意する必要がありますか?

クライアント ID は、開発者が API Console で発行するものです。拡張機能の利用者は、クライアント ID を持っていなければなりません。

しかし、開発者が発行したクライアント ID を拡張機能のパッケージに含めて配布することもできます。この場合、拡張機能の利用者はクライアント ID を入力することなく、拡張機能を利用することができます。

ただし、この方法にはセキュリティ上の問題があることもあります。拡張機能に含まれているクライアント ID が悪用される可能性があるため、開発者はこの方法を使用する際には注意が必要です。

代わりに、拡張機能の利用者が自分自身のクライアント ID を入力するように要求する方法もあります。この場合、拡張機能の利用者は API Console でクライアント ID を発行し、拡張機能の設定画面などから入力することができます。この方法はセキュリティ的にも問題がないとされています。