Skip to content

Commit

Permalink
Merge pull request #59 from TimoGlastra/fix/openid-core-draft-11-alig…
Browse files Browse the repository at this point in the history
…nment

fix: alignment with openid.core and draft 11
  • Loading branch information
nklomp committed Sep 11, 2023
2 parents 21ca439 + 4567a58 commit 1500530
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 26 deletions.
7 changes: 3 additions & 4 deletions src/authorization-response/Payload.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,9 @@ export const createResponsePayload = async (
if (!authorizationRequest) {
throw new Error(SIOPErrors.NO_REQUEST);
}
const state: string = await authorizationRequest.getMergedProperty('state');
if (!state) {
throw Error('No state');
}

// If state was in request, it must be in response
const state: string | undefined = await authorizationRequest.getMergedProperty('state');

const responsePayload: AuthorizationResponsePayload = {
...(responseOpts.accessToken && { access_token: responseOpts.accessToken }),
Expand Down
7 changes: 1 addition & 6 deletions src/id-token/IDToken.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,7 @@ export class IDToken {
if (!authorizationRequestPayload) {
throw new Error(SIOPErrors.NO_REQUEST);
}
const mergedPayloads = await verifiedAuthorizationRequest.authorizationRequest.mergedPayloads();
const idToken = new IDToken(
null,
await createIDTokenPayload(mergedPayloads, responseOpts, verifiedAuthorizationRequest.requestObject),
responseOpts
);
const idToken = new IDToken(null, await createIDTokenPayload(verifiedAuthorizationRequest, responseOpts), responseOpts);
if (verifyOpts) {
await idToken.verify(verifyOpts);
}
Expand Down
23 changes: 8 additions & 15 deletions src/id-token/Payload.ts
Original file line number Diff line number Diff line change
@@ -1,39 +1,33 @@
import { AuthorizationResponseOpts, mergeOAuth2AndOpenIdInRequestPayload } from '../authorization-response';
import { assertValidResponseOpts } from '../authorization-response/Opts';
import { authorizationRequestVersionDiscovery } from '../helpers/SIOPSpecVersion';
import { RequestObject } from '../request-object';
import {
AuthorizationRequestPayload,
IDTokenPayload,
isSuppliedSignature,
JWK,
ResponseIss,
SIOPErrors,
SubjectSyntaxTypesSupportedValues,
SupportedVersion,
VerifiedAuthorizationRequest,
} from '../types';

export const createIDTokenPayload = async (
authorizationRequestPayload: AuthorizationRequestPayload,
responseOpts: AuthorizationResponseOpts,
requestObject?: RequestObject
verifiedAuthorizationRequest: VerifiedAuthorizationRequest,
responseOpts: AuthorizationResponseOpts
): Promise<IDTokenPayload> => {
assertValidResponseOpts(responseOpts);
const authorizationRequestPayload = await verifiedAuthorizationRequest.authorizationRequest.mergedPayloads();
const requestObject = verifiedAuthorizationRequest.requestObject;
if (!authorizationRequestPayload) {
throw new Error(SIOPErrors.VERIFY_BAD_PARAMS);
}
const payload = await mergeOAuth2AndOpenIdInRequestPayload(authorizationRequestPayload, requestObject);

//fixme: client_metadata and fetch
const supportedDidMethods = payload['registration']?.subject_syntax_types_supported?.filter((sst) =>
const supportedDidMethods = verifiedAuthorizationRequest.registrationMetadataPayload.subject_syntax_types_supported.filter((sst) =>
sst.includes(SubjectSyntaxTypesSupportedValues.DID.valueOf())
);
if (!payload.state) {
throw Error('No state');
} else if (!payload.nonce) {
throw Error('No nonce');
}
// const state = payload.state;
const state = payload.state;
const nonce = payload.nonce;
const SEC_IN_MS = 1000;

Expand All @@ -58,7 +52,7 @@ export const createIDTokenPayload = async (
sub: responseOpts.signature.did,
auth_time: payload.auth_time,
nonce,
// state, // ideally this is only placed in here if required
state,
// ...(responseOpts.presentationExchange?._vp_token ? { _vp_token: responseOpts.presentationExchange._vp_token } : {}),
};
if (supportedDidMethods.indexOf(SubjectSyntaxTypesSupportedValues.JWK_THUMBPRINT) != -1 && !responseOpts.signature.did) {
Expand All @@ -85,5 +79,4 @@ const createThumbprintAndJWK = async (resOpts: AuthorizationResponseOpts): Promi
} else {
throw new Error(SIOPErrors.SIGNATURE_OBJECT_TYPE_NOT_SET);
}
return { thumbprint, subJwk };
};
2 changes: 1 addition & 1 deletion src/types/SIOP.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ export interface AuthorizationResponsePayload {
token_type?: string;
refresh_token?: string;
expires_in?: number;
state: string;
state?: string;
id_token?: string;
vp_token?: W3CVerifiablePresentation | W3CVerifiablePresentation[];
presentation_submission?: PresentationSubmission;
Expand Down

0 comments on commit 1500530

Please sign in to comment.