@@ -964,234 +964,6 @@ static char *test_jwt_decrypt_gcm(apr_pool_t *pool) {
964964
965965#endif
966966
967- static char * test_proto_validate_access_token (request_rec * r ) {
968-
969- // from http://openid.net/specs/openid-connect-core-1_0.html#id_token-tokenExample
970- // A.3 Example using response_type=id_token token
971- const char * s = "eyJraWQiOiIxZTlnZGs3IiwiYWxnIjoiUlMyNTYifQ.ewogIml"
972- "zcyI6ICJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwKICJzdWIiOiAiMjQ"
973- "4Mjg5NzYxMDAxIiwKICJhdWQiOiAiczZCaGRSa3F0MyIsCiAibm9uY2UiOiA"
974- "ibi0wUzZfV3pBMk1qIiwKICJleHAiOiAxMzExMjgxOTcwLAogImlhdCI6IDE"
975- "zMTEyODA5NzAsCiAiYXRfaGFzaCI6ICI3N1FtVVB0alBmeld0RjJBbnBLOVJ"
976- "RIgp9.F9gRev0Dt2tKcrBkHy72cmRqnLdzw9FLCCSebV7mWs7o_sv2O5s6zM"
977- "ky2kmhHTVx9HmdvNnx9GaZ8XMYRFeYk8L5NZ7aYlA5W56nsG1iWOou_-gji0"
978- "ibWIuuf4Owaho3YSoi7EvsTuLFz6tq-dLyz0dKABMDsiCmJ5wqkPUDTE3QTX"
979- "jzbUmOzUDli-gCh5QPuZAq0cNW3pf_2n4zpvTYtbmj12cVcxGIMZby7TMWES"
980- "RjQ9_o3jvhVNcCGcE0KAQXejhA1ocJhNEvQNqMFGlBb6_0RxxKjDZ-Oa329e"
981- "GDidOvvp0h5hoES4a8IuGKS7NOcpp-aFwp0qVMDLI-Xnm-Pg" ;
982-
983- oidc_jose_error_t err ;
984- oidc_jwt_t * jwt = NULL ;
985- TST_ASSERT_ERR ("oidc_jwt_parse" , oidc_jwt_parse (r -> pool , s , & jwt , NULL , FALSE, & err ), r -> pool , err );
986-
987- const char * access_token = "jHkWEdUXMU1BwAsC4vtUsZwnNvTIxEl0z9K3vx5KF0Y" ;
988- TST_ASSERT ("oidc_proto_validate_access_token" ,
989- oidc_proto_idtoken_validate_access_token (r , NULL , jwt , "id_token token" , access_token ));
990-
991- oidc_jwt_destroy (jwt );
992-
993- return 0 ;
994- }
995-
996- static char * test_proto_validate_code (request_rec * r ) {
997-
998- // from http://openid.net/specs/openid-connect-core-1_0.html#code-id_tokenExample
999- // A.4 Example using response_type=code id_token
1000- const char * s = "eyJraWQiOiIxZTlnZGs3IiwiYWxnIjoiUlMyNTYifQ.ewogIml"
1001- "zcyI6ICJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwKICJzdWIiOiAiMjQ"
1002- "4Mjg5NzYxMDAxIiwKICJhdWQiOiAiczZCaGRSa3F0MyIsCiAibm9uY2UiOiA"
1003- "ibi0wUzZfV3pBMk1qIiwKICJleHAiOiAxMzExMjgxOTcwLAogImlhdCI6IDE"
1004- "zMTEyODA5NzAsCiAiY19oYXNoIjogIkxEa3RLZG9RYWszUGswY25YeENsdEE"
1005- "iCn0.XW6uhdrkBgcGx6zVIrCiROpWURs-4goO1sKA4m9jhJIImiGg5muPUcN"
1006- "egx6sSv43c5DSn37sxCRrDZZm4ZPBKKgtYASMcE20SDgvYJdJS0cyuFw7Ijp"
1007- "_7WnIjcrl6B5cmoM6ylCvsLMwkoQAxVublMwH10oAxjzD6NEFsu9nipkszWh"
1008- "sPePf_rM4eMpkmCbTzume-fzZIi5VjdWGGEmzTg32h3jiex-r5WTHbj-u5HL"
1009- "7u_KP3rmbdYNzlzd1xWRYTUs4E8nOTgzAUwvwXkIQhOh5TPcSMBYy6X3E7-_"
1010- "gr9Ue6n4ND7hTFhtjYs3cjNKIA08qm5cpVYFMFMG6PkhzLQ" ;
1011-
1012- oidc_jose_error_t err ;
1013- oidc_jwt_t * jwt = NULL ;
1014- TST_ASSERT_ERR ("oidc_jwt_parse" , oidc_jwt_parse (r -> pool , s , & jwt , NULL , FALSE, & err ), r -> pool , err );
1015-
1016- const char * code = "Qcb0Orv1zh30vL1MPRsbm-diHiMwcLyZvn1arpZv-Jxf_11jnpEX3Tgfvk" ;
1017- TST_ASSERT ("oidc_proto_validate_code" , oidc_proto_idtoken_validate_code (r , NULL , jwt , "code id_token" , code ));
1018-
1019- oidc_jwt_destroy (jwt );
1020-
1021- return 0 ;
1022- }
1023-
1024- static char * test_proto_authorization_request (request_rec * r ) {
1025-
1026- oidc_provider_t * provider = oidc_cfg_provider_create (r -> pool );
1027-
1028- oidc_cfg_provider_issuer_set (r -> pool , provider , "https://idp.example.com" );
1029- oidc_cfg_provider_authorization_endpoint_url_set (r -> pool , provider , "https://idp.example.com/authorize" );
1030- oidc_cfg_provider_client_id_set (r -> pool , provider , "client_id" );
1031- oidc_cfg_provider_auth_request_params_set (r -> pool , provider , "jan=piet&foo=#" );
1032-
1033- const char * redirect_uri = "https://www.example.com/protected/" ;
1034- const char * state = "12345" ;
1035-
1036- oidc_proto_state_t * proto_state = oidc_proto_state_new ();
1037- oidc_proto_state_set_nonce (proto_state , "anonce" );
1038- oidc_proto_state_set_original_url (proto_state , "https://localhost/protected/index.php" );
1039- oidc_proto_state_set_original_method (proto_state , OIDC_METHOD_GET );
1040- oidc_proto_state_set_issuer (proto_state , oidc_cfg_provider_issuer_get (provider ));
1041- oidc_proto_state_set_response_type (proto_state , oidc_cfg_provider_response_type_get (provider ));
1042- oidc_proto_state_set_timestamp_now (proto_state );
1043-
1044- TST_ASSERT ("oidc_proto_request_auth (1)" ,
1045- oidc_proto_request_auth (r , provider , NULL , redirect_uri , state , proto_state , NULL , NULL , NULL ,
1046- NULL ) == HTTP_MOVED_TEMPORARILY );
1047-
1048- TST_ASSERT_STR ("oidc_proto_request_auth (2)" , apr_table_get (r -> headers_out , "Location" ),
1049- "https://idp.example.com/"
1050- "authorize?response_type=code&scope=openid&client_id=client_id&state=12345&redirect_uri=https%"
1051- "3A%2F%2Fwww.example.com%2Fprotected%2F&nonce=anonce&jan=piet&foo=bar" );
1052-
1053- return 0 ;
1054- }
1055-
1056- static char * test_logout_request (request_rec * r ) {
1057-
1058- oidc_cfg_t * c = ap_get_module_config (r -> server -> module_config , & auth_openidc_module );
1059- oidc_session_t * session = NULL ;
1060-
1061- oidc_session_load (r , & session );
1062- oidc_session_set_issuer (r , session , oidc_cfg_provider_issuer_get (oidc_cfg_provider_get (c )));
1063-
1064- oidc_cfg_provider_end_session_endpoint_set (r -> pool , oidc_cfg_provider_get (c ),
1065- "https://idp.example.com/endsession" );
1066- oidc_cfg_provider_logout_request_params_set (r -> pool , oidc_cfg_provider_get (c ), "client_id=myclient&foo=bar" );
1067-
1068- r -> args = "logout=https%3A%2F%2Fwww.example.com%2Floggedout" ;
1069-
1070- TST_ASSERT ("oidc_handle_logout (1)" , oidc_logout (r , c , session ) == HTTP_MOVED_TEMPORARILY );
1071- TST_ASSERT_STR (
1072- "oidc_handle_logout (2)" , apr_table_get (r -> headers_out , "Location" ),
1073- "https://idp.example.com/"
1074- "endsession?post_logout_redirect_uri=https%3A%2F%2Fwww.example.com%2Floggedout&client_id=myclient&foo=bar" );
1075-
1076- oidc_session_free (r , session );
1077-
1078- return 0 ;
1079- }
1080-
1081- static char * test_proto_validate_nonce (request_rec * r ) {
1082-
1083- oidc_cfg_t * c = ap_get_module_config (r -> server -> module_config , & auth_openidc_module );
1084- const char * nonce = "avSk7S69G4kEE8Km4bPiOjrfChHt6nO4Z397Lp_bQnc," ;
1085-
1086- /*
1087- * {
1088- * "typ": "JWT",
1089- * "alg": "RS256",
1090- * "x5t": "Z1NCjojeiHAib-Gm8vFE6ya6lPM"
1091- * }
1092- * {
1093- * "nonce": "avSk7S69G4kEE8Km4bPiOjrfChHt6nO4Z397Lp_bQnc,",
1094- * "iat": 1411580876,
1095- * "at_hash": "yTqsoONZbuWbN6TbgevuDQ",
1096- * "sub": "6343a29c-5399-44a7-9b35-4990f4377c96",
1097- * "amr": "password",
1098- * "auth_time": 1411577267,
1099- * "idp": "idsrv",
1100- * "name": "ksonaty",
1101- * "iss": "https://agsync.com",
1102- * "aud": "agsync_implicit",
1103- * "exp": 1411584475,
1104- * "nbf": 1411580875
1105- * }
1106- */
1107- char * s_jwt = apr_pstrdup (
1108- r -> pool ,
1109- "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IloxTkNqb2plaUhBaWItR204dkZFNnlhNmxQTSJ9."
1110- "eyJub25jZSI6ImF2U2s3UzY5RzRrRUU4S200YlBpT2pyZkNoSHQ2bk80WjM5N0xwX2JRbmMsIiwiaWF0IjoxNDExNTgwODc2LCJhdF9oYX"
1111- "NoIjoieVRxc29PTlpidVdiTjZUYmdldnVEUSIsInN1YiI6IjYzNDNhMjljLTUzOTktNDRhNy05YjM1LTQ5OTBmNDM3N2M5NiIsImFtciI6"
1112- "InBhc3N3b3JkIiwiYXV0aF90aW1lIjoxNDExNTc3MjY3LCJpZHAiOiJpZHNydiIsIm5hbWUiOiJrc29uYXR5IiwiaXNzIjoiaHR0cHM6Ly"
1113- "9hZ3N5bmMuY29tIiwiYXVkIjoiYWdzeW5jX2ltcGxpY2l0IiwiZXhwIjoxNDExNTg0NDc1LCJuYmYiOjE0MTE1ODA4NzV9.lEG-"
1114- "DgHHa0JuOEuOTBvCqyexjRVcKXBnJJm289o2HyTgclpH80DsOMED9RlXCFfuDY7nw9i2cxUmIMAV42AdTxkMPomK3chytcajvpAZJirlk6"
1115- "53bo9GTDXJSKZr5fwyEu--qahsoT5t9qvoWyFdYkvmMHFw1-"
1116- "mAHDGgVe23voc9jPuFFIhRRqIn4e8ikzN4VQeEV1UXJD02kYYFn2TRWURgiFyVeTr2r0MTn-auCEsFS_AfR1Bl_"
1117- "kmpMfqwrsicf5MTBvfPJeuSMt3t3d3LOGBkg36_z21X-ZRN7wy1KTjagr7iQ_y5csIpmtqs_QM55TTB9dW1HIosJPhiuMEJEA" );
1118- oidc_jwt_t * jwt = NULL ;
1119- oidc_jose_error_t err ;
1120- TST_ASSERT_ERR ("oidc_jwt_parse" , oidc_jwt_parse (r -> pool , s_jwt , & jwt , NULL , FALSE, & err ), r -> pool , err );
1121-
1122- TST_ASSERT ("oidc_proto_idtoken_validate_nonce (1)" ,
1123- oidc_proto_idtoken_validate_nonce (r , c , oidc_cfg_provider_get (c ), nonce , jwt ));
1124- TST_ASSERT ("oidc_proto_idtoken_validate_nonce (2)" ,
1125- oidc_proto_idtoken_validate_nonce (r , c , oidc_cfg_provider_get (c ), nonce , jwt ) == FALSE);
1126-
1127- oidc_jwt_destroy (jwt );
1128-
1129- return 0 ;
1130- }
1131-
1132- static char * test_proto_validate_jwt (request_rec * r ) {
1133-
1134- oidc_jwt_t * jwt = NULL ;
1135- oidc_jose_error_t err ;
1136-
1137- const char * s_secret = "secret" ;
1138- const char * s_issuer = "https://localhost" ;
1139- apr_time_t now = apr_time_sec (apr_time_now ());
1140-
1141- const char * s_jwt_header = "{"
1142- "\"alg\": \"HS256\""
1143- "}" ;
1144-
1145- const char * s_jwt_payload = "{"
1146- "\"nonce\": \"543210,\","
1147- "\"iat\": %" APR_TIME_T_FMT ","
1148- "\"sub\": \"alice\","
1149- "\"iss\": \"%s\","
1150- "\"aud\": \"bob\","
1151- "\"exp\": %" APR_TIME_T_FMT "}" ;
1152- s_jwt_payload = apr_psprintf (r -> pool , s_jwt_payload , now , s_issuer , now + 600 );
1153-
1154- char * s_jwt_header_encoded = NULL ;
1155- oidc_util_base64url_encode (r , & s_jwt_header_encoded , s_jwt_header , _oidc_strlen (s_jwt_header ), 1 );
1156-
1157- char * s_jwt_payload_encoded = NULL ;
1158- oidc_util_base64url_encode (r , & s_jwt_payload_encoded , s_jwt_payload , _oidc_strlen (s_jwt_payload ), 1 );
1159-
1160- char * s_jwt_message = apr_psprintf (r -> pool , "%s.%s" , s_jwt_header_encoded , s_jwt_payload_encoded );
1161-
1162- unsigned int md_len = 0 ;
1163- unsigned char md [EVP_MAX_MD_SIZE ];
1164- const EVP_MD * digest = EVP_get_digestbyname ("sha256" );
1165-
1166- TST_ASSERT ("HMAC" , HMAC (digest , (const unsigned char * )s_secret , _oidc_strlen (s_secret ),
1167- (const unsigned char * )s_jwt_message , _oidc_strlen (s_jwt_message ), md , & md_len ) != 0 );
1168-
1169- char * s_jwt_signature_encoded = NULL ;
1170- oidc_util_base64url_encode (r , & s_jwt_signature_encoded , (const char * )md , md_len , 1 );
1171-
1172- char * s_jwt =
1173- apr_psprintf (r -> pool , "%s.%s.%s" , s_jwt_header_encoded , s_jwt_payload_encoded , s_jwt_signature_encoded );
1174-
1175- TST_ASSERT_ERR ("oidc_jwt_parse" , oidc_jwt_parse (r -> pool , s_jwt , & jwt , NULL , FALSE, & err ), r -> pool , err );
1176-
1177- oidc_jwk_t * jwk = NULL ;
1178- TST_ASSERT_ERR ("oidc_util_create_symmetric_key" ,
1179- oidc_util_key_symmetric_create (r , s_secret , 0 , NULL , TRUE, & jwk ) == TRUE, r -> pool , err );
1180- TST_ASSERT_ERR ("oidc_util_create_symmetric_key (jwk)" , jwk != NULL , r -> pool , err );
1181-
1182- TST_ASSERT_ERR ("oidc_jwt_verify" ,
1183- oidc_jwt_verify (r -> pool , jwt , oidc_util_key_symmetric_merge (r -> pool , NULL , jwk ), & err ), r -> pool ,
1184- err );
1185-
1186- TST_ASSERT_ERR ("oidc_proto_validate_jwt" , oidc_proto_jwt_validate (r , jwt , s_issuer , TRUE, TRUE, 10 ), r -> pool ,
1187- err );
1188-
1189- oidc_jwk_destroy (jwk );
1190- oidc_jwt_destroy (jwt );
1191-
1192- return 0 ;
1193- }
1194-
1195967#if HAVE_APACHE_24
1196968
1197969static char * test_authz_worker (request_rec * r ) {
@@ -1638,13 +1410,6 @@ static char *all_tests(apr_pool_t *pool, request_rec *r) {
16381410 TST_RUN (test_jwt_verify_rsa , pool );
16391411 TST_RUN (test_jwt_sign_verify , pool );
16401412
1641- TST_RUN (test_proto_validate_access_token , r );
1642- TST_RUN (test_proto_validate_code , r );
1643-
1644- TST_RUN (test_proto_authorization_request , r );
1645- TST_RUN (test_proto_validate_nonce , r );
1646- TST_RUN (test_proto_validate_jwt , r );
1647-
16481413 TST_RUN (test_decode_json_object , r );
16491414
16501415 TST_RUN (test_remote_user , r );
@@ -1655,7 +1420,6 @@ static char *all_tests(apr_pool_t *pool, request_rec *r) {
16551420 TST_RUN (test_authz_worker , r );
16561421#endif
16571422
1658- TST_RUN (test_logout_request , r );
16591423 TST_RUN (test_check_cookie_domain , r );
16601424
16611425 return 0 ;
0 commit comments