Azure / Azure/static-web-apps

OpenID callback flow hits unauthorized

Open
#1,303 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
No language data
Stars
346
Forks
67
PR merge metrics
No merged PRs in 30d

Description

**Describe the bug**

We are using AAD as our "main" source of auth - however due to MFA restrictions on users in the AAD, we have an OpenID Connect server (IdentityServer) for the purpose of test users.
Lately we have observed that the last step of the OAuth flow, the callback, will redirect to initiate the AAD login flow instead (as if the request is unauthorized).
The weird part is that this is sporadic so sometimes it is successful and the user is authorized but many times it is not.

**To Reproduce**
The SWA is not public but I'll try to explain the flow here (can provide a HAR dump if necessary).
1. GET https://REDACTED.azurestaticapps.net/.auth/login/test
2. GET https://REDACTED.azurestaticapps.net/.auth/login/test?post_login_redirect_uri=/.auth/complete&staticWebAppsAuthNonce=ItcUM53Zb721QqABRHVqCYcr7pKr64UIrMebXlxHP8I1OsXEaiHsiethFd5VjmupAO3P2laEg88N7BZ3%2b1kObJeYqiFno%2b7K0GYa7%2bdBW63Fk%2bX%2bAONg3Lpmo7H1nweD
3. FORWARDS to OpenID Server: https://app-REDACTED-us-e-1.azurewebsites.net/connect/authorize?response_type=code&client_id=e2etestclientid&redirect_uri=https%3A%2F%2FREDACTED.azurestaticapps.net%2F.auth%2Flogin%2Ftest%2Fcallback&nonce=21b3726e89de49ceb7c269224910214e_20231019073216&state=redir%3D%252F.auth%252Fcomplete&scope=openid+profile+roles+email&post_login_redirect_uri=%2F.auth%2Fcomplete&staticWebAppsAuthNonce=ItcUM53Zb721QqABRHVqCYcr7pKr64UIrMebXlxHP8I1OsXEaiHsiethFd5VjmupAO3P2laEg88N7BZ3%2B1kObJeYqiFno%2B7K0GYa7%2BdBW63Fk%2BX%2BAONg3Lpmo7H1nweD
4. Enter login info and submit
5. POST login info to https://app-REDACTED-us-e-1.azurewebsites.net/Account/Login?ReturnUrl=%2Fconnect%2Fauthorize%2Fcallback%3Fresponse_type%3Dcode%26client_id%3De2etestclientid%26redirect_uri%3Dhttps%253A%252F%252FREDACTED.azurestaticapps.net%252F.auth%252Flogin%252Ftest%252Fcallback%26nonce%3D21b3726e89de49ceb7c269224910214e_20231019073216%26state%3Dredir%253D%25252F.auth%25252Fcomplete%26scope%3Dopenid%2520profile%2520roles%2520email%26post_login_redirect_uri%3D%252F.auth%252Fcomplete%26staticWebAppsAuthNonce%3DItcUM53Zb721QqABRHVqCYcr7pKr64UIrMebXlxHP8I1OsXEaiHsiethFd5VjmupAO3P2laEg88N7BZ3%252B1kObJeYqiFno%252B7K0GYa7%252BdBW63Fk%252BX%252BAONg3Lpmo7H1nweD
6. GET https://app-REDACTED-us-e-1.azurewebsites.net/connect/authorize/callback?response_type=code&client_id=e2etestclientid&redirect_uri=https%3A%2F%2FREDACTED.azurestaticapps.net%2F.auth%2Flogin%2Ftest%2Fcallback&nonce=21b3726e89de49ceb7c269224910214e_20231019073216&state=redir%3D%252F.auth%252Fcomplete&scope=openid%20profile%20roles%20email&post_login_redirect_uri=%2F.auth%2Fcomplete&staticWebAppsAuthNonce=ItcUM53Zb721QqABRHVqCYcr7pKr64UIrMebXlxHP8I1OsXEaiHsiethFd5VjmupAO3P2laEg88N7BZ3%2B1kObJeYqiFno%2B7K0GYa7%2BdBW63Fk%2BX%2BAONg3Lpmo7H1nweD
7. GET https://REDACTED.azurestaticapps.net/.auth/login/test/callback?code=956C354430285E7D5E58899B379ED8EADDBCAEE9014E38DA7A27A2936B2C51F3&scope=openid%20profile%20roles%20email&state=redir%3D%252F.auth%252Fcomplete&session_state=DcTlyhBYxdrlzzjOUvm-bUwZUUNKhsZK4aQDxNKUWro.E54146CE19A619491F62BA3FD00A2A3F

But step # 7 sets a Location header to
/.auth/login/aad?post_login_redirect_uri=/.auth/login/test/callback?code%3d956C354430285E7D5E58899B379ED8EADDBCAEE9014E38DA7A27A2936B2C51F3%26scope%3dopenid%2520profile%2520roles%2520email%26state%3dredir%253D%25252F.auth%25252Fcomplete%26session_state%3dDcTlyhBYxdrlzzjOUvm-bUwZUUNKhsZK4aQDxNKUWro.E54146CE19A619491F62BA3FD00A2A3F

```json
{
"routes": [
{
"route": "/api/health",
"allowedRoles": ["anonymous"]
},
{
"route": "/logout",
"redirect": "/.auth/logout"
},
{
"route": "/*",
"allowedRoles": ["access"],
"headers": {
"Cache-Control": "no-store"
}
}
],
"navigationFallback": {
"rewrite": "index.html",
"exclude": ["*.{css,scss,js,png,gif,ico,jpg,svg}"]
},
"responseOverrides": {
"401": {
"statusCode": 302,
"redirect": "/.auth/login/aad?post_login_redirect_uri=.referrer"
}
},
"auth": {
"rolesSource": "/api/GetRoles",
"identityProviders": {
"azureActiveDirectory": {
"registration": {
"openIdIssuer": "https://login.microsoftonline.com/REDACTED/v2.0",
"clientIdSettingName": "AZURE_CLIENT_ID",
"clientSecretSettingName": "AZURE_CLIENT_SECRET"
},
"login": {
"loginParameters": []
}
},
"customOpenIdConnectProviders": {
"test": {
"registration": {
"clientIdSettingName": "OPENID_CLIENT_ID",
"clientCredential": {
"clientSecretSettingName": "OPENID_CLIENT_SECRET"
},
"openIdConnectConfiguration": {
"wellKnownOpenIdConfiguration": "https://app-REDACTED-dev-us-e-1.azurewebsites.net/.well-known/openid-configuration"
}
},
"login": {
"nameClaimType": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name",
"scopes": [
"openid",
"profile",
"roles",
"email"
],
"loginParameterNames": []
}
}
}
}
}
}
```

**Expected behavior**
The user to be authorized and taken to the application

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.