@@ -314,30 +314,75 @@ public async Task<string> GetPlatformAccessToken(string env, string appClaim, ui
314314 throw new ArgumentException ( "Invalid issuer" ) ;
315315 }
316316
317- public async Task < string > GeSelfIdentifiedUserToken ( string env , string [ ] scopes , uint userId , uint partyId , Guid partyUuid , string userName , string email , uint ttl )
317+ public async Task < string > GetSelfIdentifiedUserToken ( string env , string [ ] scopes , uint userId , uint partyId , Guid partyUuid , string userName , uint ttl )
318318 {
319319 var header = await GetJwtHeader ( env ) ;
320320 var dateTimeOffset = new DateTimeOffset ( DateTime . UtcNow ) ;
321+ var sidJti = RandomString ( 43 ) ;
322+
323+ // https://github.com/Altinn/dialogporten/issues/3362#issuecomment-3834123082
321324 var payload = new JwtPayload
322325 {
323- // NOTE! This is an interim solution until the full list of claims is defined.
324- { "nameid" , ( int ) userId } ,
326+ { "sub" , partyUuid . ToString ( ) } ,
327+ { "sid" , sidJti } ,
328+ { "iss" , GetIssuer ( null , env ) } ,
329+ { "urn:altinn:party:uuid" , partyUuid . ToString ( ) } ,
330+ { "jti" , sidJti } ,
331+ { "urn:altinn:partyid" , ( int ) partyId } ,
325332 { "urn:altinn:userid" , ( int ) userId } ,
326333 { "urn:altinn:username" , userName } ,
334+ { "orignaliss" , "altinn2" } ,
335+ { "acr" , "idporten-loa-low" } ,
336+ { "urn:altinn:authlevel" , 0 } ,
337+ { "amr" , new [ ] { "SelfIdentified" } } ,
338+ { "urn:altinn:authenticatemethod" , "SelfIdentified" } ,
339+ { "scope" , string . Join ( ' ' , scopes ) } ,
340+ { "nbf" , dateTimeOffset . ToUnixTimeSeconds ( ) } ,
341+ { "exp" , dateTimeOffset . ToUnixTimeSeconds ( ) + ttl } ,
342+ { "iat" , dateTimeOffset . ToUnixTimeSeconds ( ) } ,
343+
344+ { "actual_iss" , "altinn-test-tools" } ,
345+
346+ } ;
347+
348+ var securityToken = new JwtSecurityToken ( header , payload ) ;
349+ var handler = new JwtSecurityTokenHandler ( ) ;
350+
351+ return handler . WriteToken ( securityToken ) ;
352+ }
353+
354+ public async Task < string > GetSelfRegisteredEmailUserToken ( string env , string [ ] scopes , uint userId , uint partyId , Guid partyUuid , string email , uint ttl )
355+ {
356+ var header = await GetJwtHeader ( env ) ;
357+ var dateTimeOffset = new DateTimeOffset ( DateTime . UtcNow ) ;
358+ var sidJti = RandomString ( 43 ) ;
359+
360+ // https://github.com/Altinn/dialogporten/issues/3362#issuecomment-3834123082
361+ var payload = new JwtPayload
362+ {
363+ { "sub" , partyUuid . ToString ( ) } ,
364+ { "sid" , sidJti } ,
365+ { "iss" , GetIssuer ( null , env ) } ,
327366 { "urn:altinn:party:uuid" , partyUuid . ToString ( ) } ,
367+ { "jti" , sidJti } ,
328368 { "urn:altinn:partyid" , ( int ) partyId } ,
329- { "urn:altinn:authenticatemethod" , "SelfIdentified" } ,
369+ { "urn:altinn:userid" , ( int ) userId } ,
370+ { "urn:altinn:username" , "epost:" + email } ,
371+ { "orignaliss" , "idporten" } ,
372+ { "email" , email } ,
373+ { "urn:altinn:party:external-identifer" , "urn:altinn:person:idporten-email:" + email } ,
374+ { "acr" , "selfregistered-email" } ,
330375 { "urn:altinn:authlevel" , 0 } ,
331- { "jti" , RandomString ( 43 ) } ,
376+ { "amr" , new [ ] { "Selfregistered-email" } } ,
377+ { "urn:altinn:authenticatemethod" , "IdportenEpost" } ,
378+ { "auth_time" , dateTimeOffset . ToUnixTimeSeconds ( ) } ,
332379 { "scope" , string . Join ( ' ' , scopes ) } ,
333380 { "nbf" , dateTimeOffset . ToUnixTimeSeconds ( ) } ,
334381 { "exp" , dateTimeOffset . ToUnixTimeSeconds ( ) + ttl } ,
335382 { "iat" , dateTimeOffset . ToUnixTimeSeconds ( ) } ,
336- { "iss" , GetIssuer ( null , env ) } ,
383+
337384 { "actual_iss" , "altinn-test-tools" } ,
338- // These are the salient claims from https://docs.digdir.no/docs/idporten/oidc/oidc_func_emaillogin.html
339- { "arm" , new [ ] { "Selfregistered-email" } } ,
340- { "email" , email }
385+
341386 } ;
342387
343388 var securityToken = new JwtSecurityToken ( header , payload ) ;
0 commit comments