SpringBoot は JustAuth を統合してサードパーティ ログインを実現 | gitee ログイン

1. サードパーティのログイン

サードパーティ ログインを理解する前に、サードパーティ ログインの背後にある一般的な実装ロジックについて話しましょう。コードの実装は実際には非常に単純です。現時点では、コードよりもアイデアの方が重要である可能性があります。

さて、少し大きな Web サイトやアプリがサードパーティ ログインをサポートしている限り、ほとんどの開発者がいる gitee、github、google などに直面し、qq、WeChat などのサードパーティ ログインに直面します。より一般的なユーザーです。

ほとんどのサードパーティ ログインは、OAuth2.0 プロトコルに基づいて実装されています。OAuth は、ユーザー リソースの承認のための安全でオープンかつシンプルな標準を提供するプロトコルです。OAuth 承認では、サードパーティがユーザーのアカウント情報に触れることができません。(パスワードなど)。

私たちが通常サードパーティのログインを使用しているのと同様に、市場には多くの例があります。

プラットフォームを登録する場合、サードパーティのログインを使用することを選択すると、通常、選択したログイン プラットフォームのログイン ページにジャンプし、そこでパスワードを入力してユーザー情報を確認します。あなたが登録するプラットフォームは、あなたのパスワード、アカウント情報、その他の情報にアクセスすることはできません。通常、ニックネームやアバターなどのいくつかの基本情報の使用を許可します。これにより、あなたの個人情報の一部がインターネット上で拡散したり、特定の者に漏洩したりするのを防ぎます。範囲。

2. プロジェクト内の Gitee ログインにアクセスします。

サードパーティを自分で 0 から 1 まで実装する場合、実際には可能ですが、必要なのはいくつかのリクエストを自分でカプセル化することだけです。市場にはホイールの作成に役立つ要素が複数あります。怠惰になることを学ぶことは可能です~

この適切な怠惰は、誰もがこのレイヤーの使用に依存していることを意味するものではありません。それを使用できるようになった後は、好奇心が旺盛になり、探索するのが好きになるはずです。もっと簡単な方法があるかどうか、またはそのようなツールを自分でパッケージ化できないか考えてみるべきです。 ? または、心の中にそのようなアイデアがあり、それがどのように実現されるかを知りたいと思っています。

これは学習中の成長だと思いますし、将来急にカスタマイズのニーズがあったとしても、それを実現できる自信があると思います。

受動的プロモーションは、自己好奇心よりもはるかに現実的で興味深いものではありません~

2.1. 環境を準備する

Springbootプロジェクトを作成し、

インポート瓶~

Giteeアカウントをお持ちください~

2.1.1、giteeはアプリケーションを作成します

[個人設定] の [データ管理] で [サードパーティ アプリ] を見つけます。

次に、「アプリケーションの作成」をクリックします。

作成が成功すると、クライアントIDとクライアントシークレットの2つの情報が取得されます。

2.1.2. 準備するもの

Springboot プロジェクトを作成し、依存関係をインポートする

 
 

XML

コードをコピーする

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.2</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.5.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.5.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.72</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.1.4</version> </dependency> <dependency> <groupId>com.xkcoding.justauth</groupId> <artifactId>justauth-spring-boot-starter</artifactId> <version>1.4.0</version> </dependency> </dependencies> 复制代码

yml設定ファイル

 
 

ヤムル

コードをコピーする

server: port: 8089 spring: application: name: springboot-redis justauth: enabled: true type: GITEE: client-id: 创建成功的应用的id client-secret: 创建成功的应用的密钥 redirect-uri: http://127.0.0.1:8089/oauth/gitee/callback #项目中的回调地址 cache: type: default 复制代码

さらに、メインのスタートアップ クラスがあり、特別なアノテーションは必要なく、通常の SpringBoot スタートアップ クラスだけです。

2.2、Controllerクラスの準備

 
 

コトリン

コードをコピーする

package com.nzc.controller; import cn.hutool.json.JSONUtil; import com.xkcoding.justauth.AuthRequestFactory; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthResponse; import me.zhyd.oauth.request.AuthRequest; import me.zhyd.oauth.utils.AuthStateUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; ​ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; ​ /** * @description: * @author: Yihui Wang * @date: 2022年07月22日 18:47 */ @Slf4j @RestController @RequestMapping("/oauth") public class AuthController { ​ @Autowired private AuthRequestFactory factory; ​ @GetMapping public List<String> list() { return factory.oauthList(); } ​ @GetMapping("/login/{type}") public void login(@PathVariable String type, HttpServletResponse response) throws IOException { AuthRequest authRequest = factory.get(type); response.sendRedirect(authRequest.authorize(AuthStateUtils.createState())); } ​ @GetMapping("/{type}/callback") public AuthResponse login(@PathVariable String type, AuthCallback callback) { AuthRequest authRequest = factory.get(type); AuthResponse response = authRequest.login(callback); log.info("【response】= {}", JSONUtil.toJsonStr(response)); return response; } ​ } 复制代码

何と言うか、この時点で Gitee のサードパーティ ログインの導入に成功しました~

JustAuth は、シンプルと完全という 2 つの言葉で説明できます。

まず、このコントローラー クラスのいくつかの操作について説明します。

最初に localhost:8089/login/{type} インターフェイスにアクセスします。ここでのタイプは、どのサードパーティ ログインが実装されているかを示し、ここにタイプが入力されます。 gitee を実装したのと同様に、ここにも gitee を入力します。

メソッドに入ると、AuthRequestFactory は type を通じて AuthRequest を取得します。この AuthRequest は、早朝のサードパーティのログインに関連するリクエスト インターフェイスをカプセル化したインターフェイスであり、これを直接使用しますソースコードを見ればすぐにわかります~

response.sendRedirect(authRequest.authorize(
AuthStateUtils.createState())); はサードパーティのログイン インターフェイスにリダイレクトされ、正しく認証された後、アプリケーションに記述したコールバック メソッドにジャンプします。

2 番目のインターフェイス /oauth/{type}/callback は、正しい承認後のリクエストのコールバック インターフェイス、つまり gitee 承認が渡されたときに呼び出されるインターフェイスです。

2.3. テストの実施

ログインしていなければログインページにジャンプしますが、ログインしていれば許可されたインターフェースになります。

ログインに成功すると、作成したコールバック インターフェイスが呼び出され、ログイン ユーザーに関する関連情報が返されます。

実はこのjsonデータには欲しい情報が含まれており、今後も記事を書き続けたいナレッジポイントも含まれています。

 
 

json

コードをコピーする

{ "code": 2000, "msg": null, "data": { "username": "crushlxb", "nickname": "宁在春", "gender": "UNKNOWN", "source": "GITEE", "token": { "accessToken": "33087141a9f029f0ad647b720653104e", "expireIn": 86400, "refreshToken": "c5d35725a443d62deb106febb99f2e1c534cc394dfb39c00c7e9d1ccf3a35b4e", "refreshTokenExpireIn": 0, }, "rawUserInfo": { "gists_url": "https://gitee.com/api/v5/users/crushlxb/gists{/gist_id}", "repos_url": "https://gitee.com/api/v5/users/crushlxb/repos", } } } 复制代码

個人情報の一部を削除しました。それよりも気になるのはaccessTokenとrefreshTokenの実装です。難しいというわけではありませんが、記事にする価値のある知識ポイントだと思います。より実践的ですよ

興味があれば、見に行くこともできます

おすすめ

転載: blog.csdn.net/wdj_yyds/article/details/131739042