Аутентификация Angular OIDC не удалась на iOS из-за неверного значения nonce в состоянииIOS

Программируем под IOS
Ответить
Anonymous
 Аутентификация Angular OIDC не удалась на iOS из-за неверного значения nonce в состоянии

Сообщение Anonymous »

У меня есть приложение Angular (19), которое использует пакет angular-oauth2-oidc (v19). Я инициализирую поток кода OIDC в ​​функции ProvideAppInitializer. Это приложение вызывается из собственного приложения iOS (в iOS 26), которое открывает браузер в приложении (не совсем уверен, какой именно, но может быть типа SFSafariViewController). Браузер в приложении открывается и переходит к моему угловому приложению, которое переходит на страницу входа в мой IAM. После успешного ввода правильных учетных данных выдается ошибка, в результате которой для пользователя отображается белый экран. При перезагрузке сайта вручную все работает нормально и пользователь успешно авторизуется.
Ошибка консоли отладки:

Код: Выделить всё

Validating access_token failed, wrong state/nonce. **- null - "app"** oidc-Error: {"type":"invalid_nonce_in_state","reason":null,"params":null}
При сравнении пытается сравнить значение null с «приложением», которое не является настоящим одноразовым номером. «Приложение» изначально (при вызове браузера приложения) указывается в параметре state-url: state=app. Эти ценности не следует ни с чем сравнивать. Это приводит меня к предположению, что метод вызывается в неподходящее время (состояние гонки).
Реализация отлично работает в браузере настольного компьютера, включая Safari, Edge, Firefox...
Инициализация oidc в моем main.ts.

Код: Выделить всё

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}
},
.
.
.
мой auth.config.ts:

Код: Выделить всё

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,
};
Когда проверка nonce отключена с помощью {disableNonceCheck: true }, все работает как положено.
В чем причина ошибки или почему вызовы validateNonce с неправильными значениями включаются в браузере приложений на iOS, а не на настольном компьютере?
Как это можно исправить или реализовать по-другому, чтобы они работали должным образом?

Подробнее здесь: https://stackoverflow.com/questions/798 ... e-in-state
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»