プロジェクトでは、このライブラリを使用しています: OAuth 2 のサポート用の angular-oauth2-oidcおよび Angular の OpenId Connect (OIDC)。
私はすべてをセットアップし、すべて正常に動作しています。
メインコンポーネント ファイル:
export class MainComponent implements OnInit {
constructor() {
this.configureSSO();
}
configureSSO() {
this.oAuthService.configure(authConfig);
this.oAuthService.tokenValidationHandler = new JwksValidationHandler();
this.oAuthService.loadDiscoveryDocumentAndTryLogin().then(() => {
// the lib received the access_token as well as the id_token, if it was requested.
// If there is an id_token, the lib validated it.
// DO STUFF WITH TOKEN HERE
});
}
}
authConfig ファイル:
import {AuthConfig} from 'angular-oauth2-oidc';
export const authConfig: AuthConfig = { /...SOME CONFIG HERE .../ }
AuthGuard ファイル:
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private router: Router, private oAuthService: OAuthService) {
}
canActivate(): boolean {
if(this.oAuthService.hasValidIdToken()){
return true;
}
return false;
}
}
OIDC プロバイダー サイトへのログインに成功すると、access_token がローカル ブラウザーのセッション ストレージに保存されていることがわかります。
これはすべて完全に機能しますが、セッション ストレージのトークンを変更すると、保護されたルートにアクセスできます。が変更されましたaccess_token
が。変更しても同じですid_token
。
--> AuthGuard では、保護されたルートにアクセスできます。
これがどのように可能になるかについて、誰かが私に教えてもらえますか?
これがドキュメントで内部的にどのように処理されているかについては何も見つけることができませんDocumentation angular-oauth2-oidc
これは実装上の問題ではなく、むしろライブラリがトークンを内部のどこかに保存し、代わりに変更されていないトークンを使用することを確信しています。他のすべては期待どおりに完全に機能します。
しかし、トークンが (実際には) 使用されていないのに、トークンをセッション ストレージに保存するのはなぜですか?!?
もっと:
ストレージからトークン全体を実際に削除すると、ブロックされたすべてのルートが実際にブロックされます。これは良いことです。JWT 内の有効期限 (exp) を実際の時間の前に変更すると、同じことが起こります。したがって、これら 2 つのチェックは実際には正常に機能していますが、AuthGuardを変更しaccess_token
たり、有効なトークンを取得したりすると... (おそらくライブラリ内から?!?)id_token
一般的にJWTについて理解できないことがあると思います.なぜそれらがローカル/セッションストレージに保存されるのか、またはそれらへの変更が効果がないのはなぜですか...
どんな答えでも大歓迎です。