Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
b4161ec
Fixed entity statement 'typ' header.
rohe Apr 28, 2025
df092b8
Fail gracefully
rohe Apr 29, 2025
dc47226
iss not part of the fetch query anymore.
rohe Apr 30, 2025
f905e11
Working on different federation topologies.
rohe May 1, 2025
3241745
Fixed entity statement 'typ' header.
rohe Apr 28, 2025
d6bac98
Fail gracefully
rohe Apr 29, 2025
6f73286
iss not part of the fetch query anymore.
rohe Apr 30, 2025
e3270cb
Working on different federation topologies.
rohe May 1, 2025
ed86873
Removed files
rohe May 1, 2025
79df361
Merge branch 'draft43_trust_mark_evaluation' of github.com:SUNET/feds…
rohe May 1, 2025
3565a0a
Scripts used in the interop.
rohe May 1, 2025
87b3789
Worked on explicit client registration.
rohe May 12, 2025
914c5a4
Merge branch 'draft43_trust_mark_evaluation' of github.com:SUNET/feds…
rohe May 12, 2025
286d3a7
Worked on explicit client registration.
rohe May 12, 2025
f6a0f06
Bumped version
rohe May 12, 2025
6ca3a55
Change in parameter name.
rohe May 12, 2025
5c23d29
Change in parameter name.
rohe May 12, 2025
c26d094
Effects of changes in idpy-oidc
rohe May 16, 2025
d241e4c
Clean up before mapping.
rohe May 16, 2025
d35f939
Set default client_registration_types.
rohe May 23, 2025
18fcc6a
Remove functionality if need be.
rohe May 26, 2025
6b5219a
Fixed circular imports
rohe May 27, 2025
c4c04fc
Logging
rohe May 27, 2025
f9c6ab2
Logging
rohe May 28, 2025
3c6117e
Logging
rohe May 28, 2025
dff627a
Need to know which client it is.
rohe May 29, 2025
3f9c9b0
Have to return value
rohe May 29, 2025
006fda0
Got explicit client registration working for OIDC.
rohe May 30, 2025
e3c0df1
Refactor authorization services.
rohe Jun 2, 2025
c3cfb18
add script to store entity configuration in AbstractFilesystem
s-hal Sep 12, 2025
0f447a4
add script to get trust mark types from config on disk
s-hal Sep 12, 2025
7a307e5
add script to store trust mark types in AbstractFilesystem
s-hal Sep 12, 2025
3ea1c41
add script to inspect AbstractFileSystem-style files
s-hal Sep 18, 2025
5c24a50
fix
s-hal Sep 18, 2025
882ad6c
message.py: replace get_payload() with local _payload_from_jws() to b…
s-hal Sep 21, 2025
f25373c
Add script to create Trust Marks
s-hal Sep 21, 2025
b1a7353
ensure trust_mark_issuers is JSON-serializable by wrapping in dict()
s-hal Sep 21, 2025
6968aa0
remove leftover line
s-hal Sep 21, 2025
e0d17dc
Merge pull request #49 from s-hal/cli-scripts
rohe Sep 22, 2025
02ed3b9
Trust Mark evaluation
rohe Oct 29, 2025
71ce85c
Fixed references.
rohe Oct 29, 2025
14d73c7
Refactored. Split entity_statement into entity_configuration and subo…
rohe Oct 30, 2025
0e3fafd
Clearer log message
rohe Oct 31, 2025
d7a4b4b
Merge branch 'master' into draft43_trust_mark_evaluation
rohe Oct 31, 2025
c854440
Merge pull request #50 from SUNET/draft43_trust_mark_evaluation
rohe Oct 31, 2025
f8939a1
Use trust_mark_type instead of trust_mark_id
s-hal Sep 26, 2025
8d772b0
Add missing test_vector file. Replace if upstream adds static vectors.
s-hal Dec 15, 2025
be123cc
Use trust_anchor request param instead of anchor in resolver
s-hal Dec 15, 2025
06edb8e
Add abfile-backed Trust Mark output option
s-hal Dec 17, 2025
53a6b23
Load Trust Marks from abfile directory
s-hal Dec 17, 2025
4decaba
Remove redundant exp check and enforce Trust Mark subject and type
s-hal Dec 17, 2025
aeb4ab8
Switch trust_marks handling to dict entries
s-hal Dec 17, 2025
9c52f23
Harden entity_configuration_to_abfile argument handling and metadata …
s-hal Dec 17, 2025
fd1cadf
Tests
s-hal Dec 18, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions dc4eu_federation/README_wallet.rst
Original file line number Diff line number Diff line change
Expand Up @@ -173,15 +173,15 @@ Typical usage::
./create_trust_mark.py -d trust_mark_issuer -m http://dc4eu.example.com/EHICCredential/se -e https://127.0.0.1:8080
./create_trust_mark.py -d trust_mark_issuer -m http://dc4eu.example.com/PDA1Credential/se -e https://127.0.0.1:8080

usage: create_trust_mark.py [-h] [-d DIR_NAME] [-e ENTITY_ID] [-m TRUST_MARK_ID] ::
usage: create_trust_mark.py [-h] [-d DIR_NAME] [-e ENTITY_ID] [-m TRUST_MARK_TYPE] ::

options:
-h, --help show this help message and exit
-d DIR_NAME, --dir_name DIR_NAME
-e ENTITY_ID, --entity_id ENTITY_ID
-m TRUST_MARK_ID, --trust_mark_id TRUST_MARK_ID
-m TRUST_MARK_TYPE, --trust_mark_type TRUST_MARK_TYPE

The TRUST_MARK_ID is http://dc4eu.example.com/PersonIdentificationData/se.
The TRUST_MARK_TYPE is http://dc4eu.example.com/PersonIdentificationData/se.
Which is something I just invented for this setup
https://127.0.0.1:8080 is where the Credential Issuer (The OpenID4VCI SATOSA frontend)
should be found.
Expand Down
4 changes: 2 additions & 2 deletions dc4eu_federation/create_trust_mark.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@
parser = argparse.ArgumentParser()
parser.add_argument('-d', '--dir_name')
parser.add_argument('-e', '--entity_id')
parser.add_argument('-m', '--trust_mark_id')
parser.add_argument('-m', '--trust_mark_type')
args = parser.parse_args()

cnf = load_config_file(f"{args.dir_name}/conf.json")
server = make_federation_combo(**cnf["entity"])

_tme = server.server.trust_mark_entity
_trust_mark = _tme.create_trust_mark(args.trust_mark_id, args.entity_id)
_trust_mark = _tme.create_trust_mark(args.trust_mark_type, args.entity_id)
print(_trust_mark)
2 changes: 1 addition & 1 deletion dc4eu_federation/query_server/conf.json
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@
"kwargs": {
"entity_type": "credential_issuer",
"credential_type": "PersonIdentificationData",
"trust_mark_id": "http://dc4eu.example.com/PersonIdentificationData/se"
"trust_mark_type": "http://dc4eu.example.com/PersonIdentificationData/se"
}
}
}
Expand Down
26 changes: 13 additions & 13 deletions edu_federation/README_identity.rst
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,11 @@ This will create a number of things in the *trust_anchor* directory
All entities in the federation has to have some information about the
trust mark. The information to pass along is collected by doing::

./get_info.py -k -t https://127.0.0.1:7010 > trust_anchor.json
./get_info.py -k -t https://89.46.21.210:7010 > trust_anchor.json

This must be done while the Trust anchor is running.
Of course if you have changed the entity_id of the trust anchor from
https://127.0.0.1:7003 to something else you have to change this command accordingly.
https://89.46.21.210:7003 to something else you have to change this command accordingly.

Now you're done with phase 1 concerning the trust anchor. So you can
kill that process for the time being.
Expand Down Expand Up @@ -92,11 +92,11 @@ Now four things have to happen::
The first two are simply::

./add_info.py -s trust_anchor.json -t trust_mark_issuer/trust_anchors
echo -e "https://127.0.0.1:7010" >> trust_mark_issuer/authority_hints
echo -e "https://89.46.21.210:7010" >> trust_mark_issuer/authority_hints

The third would look like this::

./get_info.py -k -s https://127.0.0.1:6010 > tmp.json
./get_info.py -k -s https://89.46.21.210:6010 > tmp.json
./add_info.py -s tmp.json -t trust_anchor/subordinates

The fourth is presently done like this (may change in the future)::
Expand Down Expand Up @@ -143,11 +143,11 @@ Now four things have to happen::
The first two are simply::

./add_info.py -s trust_anchor.json -t openid_provider/trust_anchors
echo -e "https://127.0.0.1:7010" >> openid_provider/authority_hints
echo -e "https://89.46.21.210:7010" >> openid_provider/authority_hints

The third would look like this::

./get_info.py -k -s https://127.0.0.1:4020 > tmp.json
./get_info.py -k -s https://89.46.21.210:4020 > tmp.json
./add_info.py -s tmp.json -t trust_anchor/subordinates


Expand Down Expand Up @@ -190,11 +190,11 @@ Now four things have to happen::
The first two are simply::

./add_info.py -s trust_anchor.json -t relying_party_explicit/trust_anchors
echo -e "https://127.0.0.1:7010" >> relying_party_explicit/authority_hints
echo -e "https://89.46.21.210:7010" >> relying_party_explicit/authority_hints

The third would look like this::

./get_info.py -k -s https://127.0.0.1:4010 > tmp.json
./get_info.py -k -s https://89.46.21.210:4010 > tmp.json
./add_info.py -s tmp.json -t trust_anchor/subordinates


Expand Down Expand Up @@ -237,11 +237,11 @@ Now four things have to happen::
The first two are simply::

./add_info.py -s trust_anchor.json -t relying_party_automatic/trust_anchors
echo -e "https://127.0.0.1:7010" >> relying_party_automatic/authority_hints
echo -e "https://89.46.21.210:7010" >> relying_party_automatic/authority_hints

The third would look like this::

./get_info.py -k -s https://127.0.0.1:4015 > tmp.json
./get_info.py -k -s https://89.46.21.210:4010 > tmp.json
./add_info.py -s tmp.json -t trust_anchor/subordinates


Expand All @@ -265,17 +265,17 @@ Creating a trust mark for an entity
For this the script *create_trust_mark.py* is included.
Typical usage::

./create_trust_mark.py -d trust_mark_issuer -m https://refeds.org/category/personalized -e https://127.0.0.1:4010
./create_trust_mark.py -d trust_mark_issuer -m https://refeds.org/category/personalized -e https://89.46.21.210:4010
> trust_mark.4010


usage: create_trust_mark.py [-h] [-d DIR_NAME] [-e ENTITY_ID] [-m TRUST_MARK_ID] ::
usage: create_trust_mark.py [-h] [-d DIR_NAME] [-e ENTITY_ID] [-m TRUST_MARK_TYPE] ::

options:
-h, --help show this help message and exit
-d DIR_NAME, --dir_name DIR_NAME The directory of the trust mark issuer
-e ENTITY_ID, --entity_id ENTITY_ID The target of the Trust Mark
-m TRUST_MARK_ID, --trust_mark_id TRUST_MARK_ID
-m TRUST_MARK_TYPE, --trust_mark_type TRUST_MARK_TYPE

The trust mark issuer doesn't have to be running for this to work.
Once you have the trust mark drop it in the relying_party_explicit/::
Expand Down
4 changes: 2 additions & 2 deletions edu_federation/create_trust_mark.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@
parser = argparse.ArgumentParser()
parser.add_argument('-d', '--dir_name')
parser.add_argument('-e', '--entity_id')
parser.add_argument('-m', '--trust_mark_id')
parser.add_argument('-m', '--trust_mark_type')
args = parser.parse_args()

cnf = load_config_file(f"{args.dir_name}/conf.json")
server = make_federation_combo(**cnf["entity"])

_tme = server.server.trust_mark_entity
_trust_mark = _tme.create_trust_mark(args.trust_mark_id, args.entity_id)
_trust_mark = _tme.create_trust_mark(args.trust_mark_type, args.entity_id)
print(_trust_mark)
5 changes: 3 additions & 2 deletions edu_federation/relying_party_explicit/conf.json
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@
"services": [
"entity_configuration",
"entity_statement",
"oauth_registration",
"oidc_registration",
"list"
],
"entity_type": {
Expand Down Expand Up @@ -197,6 +197,7 @@
"port": 4010,
"server_cert": "certs/cert.pem",
"server_key": "certs/key.pem",
"domain": "127.0.0.1"
"domain": "127.0.0.1",
"debug": true
}
}
2 changes: 1 addition & 1 deletion edu_federation/trust_anchor/conf.json
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@
"server_key": "certs/example.key",
"cert_chain": null,
"port": 7010,
"domain": "127.0.0.1",
"domain": "0.0.0.0",
"debug": false
}
}
3 changes: 2 additions & 1 deletion edu_federation/trust_anchor/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,5 +185,6 @@ def wkof():
lifetime=_ctx.default_lifetime)

response = make_response(_statement)
response.headers['Content-Type'] = 'application/jose; charset=UTF-8'
if 'Content-Type' not in response.headers:
response.headers['Content-Type'] = 'application/entity-statement+jwt'
return response
2 changes: 1 addition & 1 deletion edu_federation/trust_mark_issuer/conf.json
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@
"server_key": "certs/example.key",
"cert_chain": null,
"port": 6010,
"domain": "127.0.0.1",
"domain": "0.0.0.0",
"debug": false
}
}
4 changes: 2 additions & 2 deletions example/display_entity.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from idpyoidc.key_import import import_jwks
from idpyoidc.server.exception import ServiceError

from fedservice.message import EntityStatement
from fedservice.message import EntityConfiguration


def get_self_signed_entity_statement(entity_id):
Expand All @@ -18,7 +18,7 @@ def get_self_signed_entity_statement(entity_id):
raise ServiceError(_response.reason)
_jws = factory(_response.text)
_payload = _jws.jwt.payload()
entity_statement = EntityStatement(**_payload)
entity_statement = EntityConfiguration(**_payload)
_key_jar = KeyJar()
# verify entity_statement["iss"]
_key_jar = import_jwks(_key_jar, entity_statement['jwks'], entity_id)
Expand Down
1 change: 1 addition & 0 deletions example/test_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from fedservice.utils import make_federation_combo

subdir = sys.argv[1]

config_file = sys.argv[2]

_cnf = load_values_from_file(load_config_file(f"{subdir}/{config_file}"))
Expand Down
Loading
Loading