mcp: add optional issuer validator for pre-registered client validation (SEP-2352) (#946)
Fixes #978
This commit is contained in:
parent
189a85ad92
commit
dfb45f1e11
1 changed files with 190 additions and 5 deletions
|
|
@ -609,6 +609,8 @@ func TestHandleRegistration(t *testing.T) {
|
|||
asm *oauthex.AuthServerMeta
|
||||
want *resolvedClientConfig
|
||||
wantError bool
|
||||
issuerMatch bool
|
||||
issuerSuffix string
|
||||
}{
|
||||
{
|
||||
name: "ClientIDMetadataDocument",
|
||||
|
|
@ -647,6 +649,79 @@ func TestHandleRegistration(t *testing.T) {
|
|||
authStyle: oauth2.AuthStyleInParams,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Preregistered_IssuerMatch",
|
||||
serverConfig: &oauthtest.RegistrationConfig{
|
||||
PreregisteredClients: map[string]oauthtest.ClientInfo{
|
||||
"pre_client_id": {
|
||||
Secret: "pre_client_secret",
|
||||
},
|
||||
},
|
||||
},
|
||||
handlerConfig: &AuthorizationCodeHandlerConfig{
|
||||
PreregisteredClient: &oauthex.ClientCredentials{
|
||||
ClientID: "pre_client_id",
|
||||
ClientSecretAuth: &oauthex.ClientSecretAuth{
|
||||
ClientSecret: "pre_client_secret",
|
||||
},
|
||||
Issuer: "", // set dynamically in the test
|
||||
},
|
||||
},
|
||||
want: &resolvedClientConfig{
|
||||
registrationType: registrationTypePreregistered,
|
||||
clientID: "pre_client_id",
|
||||
clientSecret: "pre_client_secret",
|
||||
authStyle: oauth2.AuthStyleInParams,
|
||||
},
|
||||
issuerMatch: true,
|
||||
},
|
||||
{
|
||||
name: "Preregistered_IssuerMismatch",
|
||||
serverConfig: &oauthtest.RegistrationConfig{
|
||||
PreregisteredClients: map[string]oauthtest.ClientInfo{
|
||||
"pre_client_id": {
|
||||
Secret: "pre_client_secret",
|
||||
},
|
||||
},
|
||||
},
|
||||
handlerConfig: &AuthorizationCodeHandlerConfig{
|
||||
PreregisteredClient: &oauthex.ClientCredentials{
|
||||
ClientID: "pre_client_id",
|
||||
ClientSecretAuth: &oauthex.ClientSecretAuth{
|
||||
ClientSecret: "pre_client_secret",
|
||||
},
|
||||
Issuer: "https://other-issuer.example.com",
|
||||
},
|
||||
},
|
||||
wantError: true,
|
||||
},
|
||||
{
|
||||
name: "Preregistered_IssuerMatchTrailingSlash",
|
||||
serverConfig: &oauthtest.RegistrationConfig{
|
||||
PreregisteredClients: map[string]oauthtest.ClientInfo{
|
||||
"pre_client_id": {
|
||||
Secret: "pre_client_secret",
|
||||
},
|
||||
},
|
||||
},
|
||||
handlerConfig: &AuthorizationCodeHandlerConfig{
|
||||
PreregisteredClient: &oauthex.ClientCredentials{
|
||||
ClientID: "pre_client_id",
|
||||
ClientSecretAuth: &oauthex.ClientSecretAuth{
|
||||
ClientSecret: "pre_client_secret",
|
||||
},
|
||||
Issuer: "", // set dynamically in the test (with trailing slash)
|
||||
},
|
||||
},
|
||||
want: &resolvedClientConfig{
|
||||
registrationType: registrationTypePreregistered,
|
||||
clientID: "pre_client_id",
|
||||
clientSecret: "pre_client_secret",
|
||||
authStyle: oauth2.AuthStyleInParams,
|
||||
},
|
||||
issuerMatch: true,
|
||||
issuerSuffix: "/",
|
||||
},
|
||||
{
|
||||
name: "NoneSupported",
|
||||
handlerConfig: &AuthorizationCodeHandlerConfig{
|
||||
|
|
@ -660,6 +735,10 @@ func TestHandleRegistration(t *testing.T) {
|
|||
t.Run(tt.name, func(t *testing.T) {
|
||||
s := oauthtest.NewFakeAuthorizationServer(oauthtest.Config{RegistrationConfig: tt.serverConfig})
|
||||
s.Start(t)
|
||||
// Set the Issuer dynamically if requested by the test case.
|
||||
if tt.issuerMatch {
|
||||
tt.handlerConfig.PreregisteredClient.Issuer = s.URL() + tt.issuerSuffix
|
||||
}
|
||||
tt.handlerConfig.AuthorizationCodeFetcher = func(ctx context.Context, args *AuthorizationArgs) (*AuthorizationResult, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
|
@ -679,6 +758,9 @@ func TestHandleRegistration(t *testing.T) {
|
|||
}
|
||||
return
|
||||
}
|
||||
if tt.wantError {
|
||||
t.Fatal("handleRegistration() expected error, got nil")
|
||||
}
|
||||
if got.registrationType != tt.want.registrationType {
|
||||
t.Errorf("handleRegistration() registrationType = %v, want %v", got.registrationType, tt.want.registrationType)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue