検索
ホームページJavaOAuth 2.0 リソース サーバー JWT を使用したアクセス許可 (認可) の問題

OAuth 2.0 リソース サーバー JWT を使用すると、権限 (認可) の問題が発生することがあります。これは、多くの開発者が開発プロセス中に頻繁に遭遇する課題です。 OAuth 2.0 は、ユーザーがサードパーティのアプリケーションが保護されたリソースにアクセスすることを承認できるようにする承認のオープン標準です。 JWT (JSON Web Token) は、Web アプリケーション間でクレームを渡す方法です。ただし、実際には、認可の失敗、アクセス トークンの取得の失敗など、いくつかの権限の問題が発生する可能性があります。この記事では、これらの問題を分析し、開発者が OAuth 2.0 リソース サーバー JWT をより効果的に使用できるようにするためのいくつかの解決策を提供します。

質問内容

oauth 2.0 リソースサーバー jwt を使用して、簡単なアプリケーションで jwt を使用したアクセス認可を構成しようとしています。

認証部分全体は正常に動作していますが、認証で問題が発生しています。トークンに正しい権限が存在する場合でも、すべての保護されたエンドポイントで 403禁断エラーが発生します。

デフォルトのスコープ (scope_) 属性を使用し、構成をロール (role_) に変更しようとしましたが、問題は解決しません。

解決方法を知っている人はいますか?

完全なソースコード: https://github.com/gustavosc1/spring-security-jwt

トークンの生成例: eyjhbgcioijsuzi1nij9.eyjpc3mioijzchjpbmctc2vjdxjpdhktand0iiwic3viijoidxnlcm5hbwuilcjlehaioje3mdu0ndmyotqsimlhdci6mtcwntqwnzi5ncwicm9szxmi oijst0xfx0fetuloin0. peiv wrthx_7mr6eefqbid5dplhffzcvd7scmmt3f7rk7sk1i6kerpqi5ubdvaefnzsjq6vka5nadltsbqidfzogmoixjktfhsc5zrnyyrhikvnwcwb3wrgdd1ezgihaldfjxwxsyypau njwdxznirkl93e6mg1uao5piy9p- 9yp8jer7o31wkdr1coskzk3gqw42uecib9h1rrlkx9pdk7pf9rtfssfcwc-ntvismrycreco9rialqfydpdzeojimcbqveyboqfhn2woepgdm8mr5zsdhgdq e1ivsibfbcj_0486zuqiksxp2kniljhl2b5qnan0 7f jpvslk--ccsg

セキュリティ構成:

リーリー

ユーザー詳細サービスimpl:

リーリー

ユーザー認証済み:

リーリー

jwtサービス:

リーリー

プライベートコントローラー:

@configuration
@enablewebsecurity
//@enablemethodsecurity(prepostenabled = true)
public class securityconfig {
  @value("${jwt.public.key}")
  private rsapublickey key;
  @value("${jwt.private.key}")
  private rsaprivatekey priv;

  @bean
  securityfilterchain filterchain(httpsecurity http) throws exception {
    http.csrf(csrf -> csrf.disable())
        .authorizehttprequests(
            auth -> auth
                .requestmatchers("/authenticate").permitall()
                .requestmatchers("/register").permitall()
                .requestmatchers("/private").hasanyrole("admin"))
        .httpbasic(customizer.withdefaults())
        
        // https://docs-spring-io.translate.goog/spring-security/reference/servlet/oauth2/resource-server/jwt.html?_x_tr_sl=en&_x_tr_tl=pt&_x_tr_hl=pt-br&_x_tr_pto=sc
        .oauth2resourceserver(
                conf -> conf.jwt(
                    jwt -> jwt.decoder(jwtdecoder())
                    .jwtauthenticationconverter(jwtauthenticationconverter())));
                
    return http.build();
  }
  
  @bean
  public jwtauthenticationconverter jwtauthenticationconverter() {
      jwtgrantedauthoritiesconverter grantedauthoritiesconverter = new jwtgrantedauthoritiesconverter();
      grantedauthoritiesconverter.setauthoritiesclaimname("roles");
      grantedauthoritiesconverter.setauthorityprefix("role_");

      jwtauthenticationconverter jwtauthenticationconverter = new jwtauthenticationconverter();
      jwtauthenticationconverter.setjwtgrantedauthoritiesconverter(grantedauthoritiesconverter);
      return jwtauthenticationconverter;
  }

  @bean
  jwtdecoder jwtdecoder() {
    return nimbusjwtdecoder.withpublickey(this.key).build();
  }

  @bean
  jwtencoder jwtencoder() {
    jwk jwk = new rsakey.builder(this.key).privatekey(this.priv).build();
    jwksource<securitycontext> jwks = new immutablejwkset<>(new jwkset(jwk));
    return new nimbusjwtencoder(jwks);
  }
  
  @bean
  passwordencoder passwordencoder() {
    return new bcryptpasswordencoder();
  }
  
}

回避策

提供されたトークンが生成され、roles フィールドが ROLE_ADMIN に設定されました。 jwtAuthenticationConverter() で、setAuthorityPrefixROLE とともに使用しようとすると、結果は ROLE_ROLE_ADMIN になります。

この問題を修正するには、この行を grantedAuthoritiesConverter.setAuthorityPrefix(""); に変更します。

この調整を行った後、問題は解決されるはずです。他に問題が発生した場合は、お知らせください。

######知らせ:######

この手順を省略すると、デフォルトのプレフィックスは SCOPE になり、ロールは

SCOPE_ROLE_ADMIN

になります。

以上がOAuth 2.0 リソース サーバー JWT を使用したアクセス許可 (認可) の問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はstackoverflowで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境