Allow to validate provider metadata

According to the OpenID Connect Discovery 1.0 spec.
Provide the default values for fields when they are defined.
Introduce VerifiedProviderMetadata.
Rename Metadata to ProviderMetadata.
Implement Deserialize for ProviderMetadata.
This commit is contained in:
Kévin Commaille
2022-08-04 13:52:02 +02:00
committed by Quentin Gliech
parent 3eaf2fac6d
commit 56c49be587
5 changed files with 1060 additions and 7 deletions

7
Cargo.lock generated
View File

@@ -123,6 +123,12 @@ dependencies = [
"password-hash", "password-hash",
] ]
[[package]]
name = "assert_matches"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9"
[[package]] [[package]]
name = "async-compression" name = "async-compression"
version = "0.3.14" version = "0.3.14"
@@ -2803,6 +2809,7 @@ dependencies = [
name = "oauth2-types" name = "oauth2-types"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"assert_matches",
"chrono", "chrono",
"data-encoding", "data-encoding",
"http", "http",

View File

@@ -1 +1,2 @@
msrv = "1.60.0" msrv = "1.60.0"
doc-valid-idents = ["OpenID", "OAuth", ".."]

View File

@@ -25,7 +25,7 @@ use mas_iana::{
use mas_jose::{SigningKeystore, StaticKeystore}; use mas_jose::{SigningKeystore, StaticKeystore};
use mas_router::UrlBuilder; use mas_router::UrlBuilder;
use oauth2_types::{ use oauth2_types::{
oidc::{ClaimType, Metadata, SubjectType}, oidc::{ClaimType, ProviderMetadata, SubjectType},
requests::{Display, GrantType, Prompt, ResponseMode}, requests::{Display, GrantType, Prompt, ResponseMode},
scope, scope,
}; };
@@ -134,7 +134,7 @@ pub(crate) async fn get(
let prompt_values_supported = Some(vec![Prompt::None, Prompt::Login, Prompt::Create]); let prompt_values_supported = Some(vec![Prompt::None, Prompt::Login, Prompt::Create]);
let metadata = Metadata { let metadata = ProviderMetadata {
issuer, issuer,
authorization_endpoint, authorization_endpoint,
token_endpoint, token_endpoint,
@@ -161,7 +161,7 @@ pub(crate) async fn get(
request_parameter_supported, request_parameter_supported,
request_uri_parameter_supported, request_uri_parameter_supported,
prompt_values_supported, prompt_values_supported,
..Metadata::default() ..ProviderMetadata::default()
}; };
Json(metadata) Json(metadata)

View File

@@ -22,3 +22,6 @@ itertools = "0.10.3"
mas-iana = { path = "../iana" } mas-iana = { path = "../iana" }
mas-jose = { path = "../jose" } mas-jose = { path = "../jose" }
[dev-dependencies]
assert_matches = "1.5.0"

File diff suppressed because it is too large Load Diff