Die Angular-OIDC-Authentifizierung schlägt unter iOS aufgrund einer ungültigen Nonce im Status fehlIOS

Programmierung für iOS
Anonymous
 Die Angular-OIDC-Authentifizierung schlägt unter iOS aufgrund einer ungültigen Nonce im Status fehl

Post by Anonymous »

Ich habe eine Angular (19)-Anwendung, die das Paket angle-oauth2-oidc (v19) verwendet. Ich initialisiere den OIDC-Codefluss in der Funktion „proveAppInitializer“. Diese Anwendung wird aus einer nativen iOS-App (auf iOS 26) aufgerufen, die einen In-App-Browser öffnet (nicht ganz sicher, welcher Art, könnte aber vom Typ SFSafariViewController sein). Der In-App-Browser wird geöffnet und navigiert zu meiner Angular-Anwendung, die zur Anmeldeseite meines IAM navigiert. Nach erfolgreicher Eingabe der korrekten Anmeldeinformationen wird ein Fehler ausgegeben, der zu einem weißen Bildschirm für den Benutzer führt. Beim manuellen Neuladen der Site funktioniert alles einwandfrei und der Benutzer wurde erfolgreich angemeldet.
Fehler in der Debug-Konsole:

Code: Select all

Validating access_token failed, wrong state/nonce. **- null - "app"** oidc-Error: {"type":"invalid_nonce_in_state","reason":null,"params":null}
Der Vergleich versucht, null mit „app“ zu vergleichen, bei denen es sich nicht um echte Nonces handelt. „app“ wird zunächst (beim Aufruf des In-App-Browsers) im State-URL-Parameter angegeben: state=app. Diese Werte sollten mit nichts verglichen werden. Was mich zu der Annahme führt, dass die Methode zum falschen Zeitpunkt aufgerufen wird (Race Condition).
Die Implementierung funktioniert gut auf Desktop-Browsern, einschließlich Safari, Edge, Firefox...
Initialisierung von oidc in meiner main.ts.

Code: Select all

const oidcInitializer = async () => {
const oauthService = inject(OAuthService);
oauthService.configure(authConfig);
await oauthService.loadDiscoveryDocumentAndTryLogin().then(() => {
if (!oauthService.hasValidAccessToken()) {
oauthService.initLoginFlow();
}
}).catch(() => {
return Promise.resolve();
});
};

bootstrapApplication(AppComponent, {
providers: [
importProvidersFrom(BrowserModule, ReactiveFormsModule),
{
provide: ErrorHandler,
useClass: GlobalErrorHandler,
},
provideHttpClient(),
provideOAuthClient(),
provideAppInitializer(oidcInitializer),
provideRouter([
{
path: '',
component: MainComponent,
canActivate: [AuthGuard],
resolve: {state: StateResolver}
},
.
.
.
meine auth.config.ts:

Code: Select all

export const authConfig: AuthConfig = {
issuer: environment.issuer,
redirectUri: window.location.origin,
logoutUrl: 'https://XXX/LogoutPage.html',
postLogoutRedirectUri: window.location.origin,
clientId: environment.clientId,
responseType: 'code',
scope: environment.scope,
showDebugInformation: false,
oidc: true,
strictDiscoveryDocumentValidation: false,
};
Wenn die Nonce-Überprüfung über {disableNonceCheck: true } deaktiviert wird, funktioniert alles wie erwartet.
Was ist der Grund für den Fehler oder warum werden ValidateNonce-Aufrufe mit den falschen Werten im App-Browser auf iOS und nicht auf dem Desktop aktiviert?
Wie kann dies behoben oder anders implementiert werden, damit es wie erwartet funktioniert?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post