Skip to content

Commit f2ebb46

Browse files
committed
Add full OIDC flow test: ID token fetch + NPM token exchange
1 parent b45ed45 commit f2ebb46

1 file changed

Lines changed: 31 additions & 5 deletions

File tree

.github/workflows/release.yml

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,16 +100,42 @@ jobs:
100100
echo "Yarn registry config:"
101101
cat .yarnrc.yml
102102
echo ""
103-
echo "=== Testing OIDC Token Fetch ==="
103+
echo "=== Testing OIDC Token Fetch (Step 1: Get ID Token) ==="
104104
if [[ -n "$ACTIONS_ID_TOKEN_REQUEST_URL" && -n "$ACTIONS_ID_TOKEN_REQUEST_TOKEN" ]]; then
105-
echo "Attempting to fetch OIDC token for audience: npm:registry.npmjs.org"
105+
echo "Attempting to fetch OIDC ID token for audience: npm:registry.npmjs.org"
106106
RESPONSE=$(curl -sSL -H "Authorization: bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \
107107
"${ACTIONS_ID_TOKEN_REQUEST_URL}&audience=npm:registry.npmjs.org" 2>&1)
108108
if [[ $? -eq 0 ]]; then
109-
echo "Token fetch successful!"
110-
echo "Response contains 'value' field: $(echo "$RESPONSE" | jq -r 'has("value")')"
109+
echo "✓ ID token fetch successful!"
110+
ID_TOKEN=$(echo "$RESPONSE" | jq -r '.value')
111+
if [[ "$ID_TOKEN" != "null" && -n "$ID_TOKEN" ]]; then
112+
echo "✓ ID token extracted (length: ${#ID_TOKEN})"
113+
114+
echo ""
115+
echo "=== Testing OIDC Token Exchange (Step 2: Exchange for NPM token) ==="
116+
PACKAGE_NAME=$(jq -r '.name' package.json | sed 's/^@/%40/')
117+
EXCHANGE_URL="https://registry.npmjs.org/-/npm/v1/oidc/token/exchange/package/${PACKAGE_NAME}"
118+
echo "Exchange URL: $EXCHANGE_URL"
119+
120+
EXCHANGE_RESPONSE=$(curl -sSL -w "\nHTTP_STATUS:%{http_code}" \
121+
-H "Authorization: Bearer $ID_TOKEN" \
122+
-X POST "$EXCHANGE_URL" 2>&1)
123+
HTTP_STATUS=$(echo "$EXCHANGE_RESPONSE" | grep "HTTP_STATUS:" | cut -d: -f2)
124+
BODY=$(echo "$EXCHANGE_RESPONSE" | sed '/HTTP_STATUS:/d')
125+
126+
echo "HTTP Status: $HTTP_STATUS"
127+
if [[ "$HTTP_STATUS" == "200" ]]; then
128+
echo "✓ Token exchange successful!"
129+
echo "Response has 'token' field: $(echo "$BODY" | jq -r 'has("token")')"
130+
else
131+
echo "✗ Token exchange FAILED!"
132+
echo "Response: $BODY"
133+
fi
134+
else
135+
echo "✗ No ID token in response!"
136+
fi
111137
else
112-
echo "Token fetch FAILED!"
138+
echo "✗ ID token fetch FAILED!"
113139
echo "Error: $RESPONSE"
114140
fi
115141
else

0 commit comments

Comments
 (0)