syntax = "proto3"; package api; option java_package = "com.coreos.dex.api"; option go_package = "github.com/dexidp/dex/api/v2;api"; // Client represents an OAuth2 client. message Client { string id = 1; string secret = 2; repeated string redirect_uris = 3; repeated string trusted_peers = 4; bool public = 5; string name = 6; string logo_url = 7; repeated string allowed_connectors = 8; } // ClientInfo represents an OAuth2 client without sensitive information. message ClientInfo { string id = 1; repeated string redirect_uris = 2; repeated string trusted_peers = 3; bool public = 4; string name = 5; string logo_url = 6; repeated string allowed_connectors = 7; } // GetClientReq is a request to retrieve client details. message GetClientReq { // The ID of the client. string id = 1; } // GetClientResp returns the client details. message GetClientResp { Client client = 1; } // CreateClientReq is a request to make a client. message CreateClientReq { Client client = 1; } // CreateClientResp returns the response from creating a client. message CreateClientResp { bool already_exists = 1; Client client = 2; } // DeleteClientReq is a request to delete a client. message DeleteClientReq { // The ID of the client. string id = 1; } // DeleteClientResp determines if the client is deleted successfully. message DeleteClientResp { bool not_found = 1; } // UpdateClientReq is a request to update an existing client. message UpdateClientReq { string id = 1; repeated string redirect_uris = 2; repeated string trusted_peers = 3; string name = 4; string logo_url = 5; repeated string allowed_connectors = 6; } // UpdateClientResp returns the response from updating a client. message UpdateClientResp { bool not_found = 1; } // ListClientReq is a request to enumerate clients. message ListClientReq {} // ListClientResp returns a list of clients. message ListClientResp { repeated ClientInfo clients = 1; } // TODO(ericchiang): expand this. // Password is an email for password mapping managed by the storage. message Password { string email = 1; // Currently we do not accept plain text passwords. Could be an option in the future. bytes hash = 2; string username = 3; string user_id = 4; } // CreatePasswordReq is a request to make a password. message CreatePasswordReq { Password password = 1; } // CreatePasswordResp returns the response from creating a password. message CreatePasswordResp { bool already_exists = 1; } // UpdatePasswordReq is a request to modify an existing password. message UpdatePasswordReq { // The email used to lookup the password. This field cannot be modified string email = 1; bytes new_hash = 2; string new_username = 3; } // UpdatePasswordResp returns the response from modifying an existing password. message UpdatePasswordResp { bool not_found = 1; } // DeletePasswordReq is a request to delete a password. message DeletePasswordReq { string email = 1; } // DeletePasswordResp returns the response from deleting a password. message DeletePasswordResp { bool not_found = 1; } // ListPasswordReq is a request to enumerate passwords. message ListPasswordReq {} // ListPasswordResp returns a list of passwords. message ListPasswordResp { repeated Password passwords = 1; } // Connector is a strategy used by Dex for authenticating a user against another identity provider message Connector { string id = 1; string type = 2; string name = 3; bytes config = 4; repeated string grant_types = 5; } // CreateConnectorReq is a request to make a connector. message CreateConnectorReq { Connector connector = 1; } // CreateConnectorResp returns the response from creating a connector. message CreateConnectorResp { bool already_exists = 1; } // GrantTypes wraps a list of grant types to distinguish between // "not specified" (no update) and "empty list" (unrestricted). message GrantTypes { repeated string grant_types = 1; } // UpdateConnectorReq is a request to modify an existing connector. message UpdateConnectorReq { // The id used to lookup the connector. This field cannot be modified string id = 1; string new_type = 2; string new_name = 3; bytes new_config = 4; // If set, updates the connector's allowed grant types. // An empty grant_types list means unrestricted (all grant types allowed). // If not set (null), grant types are not modified. GrantTypes new_grant_types = 5; } // UpdateConnectorResp returns the response from modifying an existing connector. message UpdateConnectorResp { bool not_found = 1; } // DeleteConnectorReq is a request to delete a connector. message DeleteConnectorReq { string id = 1; } // DeleteConnectorResp returns the response from deleting a connector. message DeleteConnectorResp { bool not_found = 1; } // ListConnectorReq is a request to enumerate connectors. message ListConnectorReq {} // ListConnectorResp returns a list of connectors. message ListConnectorResp { repeated Connector connectors = 1; } // VersionReq is a request to fetch version info. message VersionReq {} // VersionResp holds the version info of components. message VersionResp { // Semantic version of the server. string server = 1; // Numeric version of the API. It increases every time a new call is added to the API. // Clients should use this info to determine if the server supports specific features. int32 api = 2; } // DiscoveryReq is a request to fetch discover information. message DiscoveryReq {} //DiscoverResp holds the version oidc disovery info. message DiscoveryResp { string issuer = 1; string authorization_endpoint = 2; string token_endpoint = 3; string jwks_uri = 4; string userinfo_endpoint = 5; string device_authorization_endpoint = 6; string introspection_endpoint = 7; repeated string grant_types_supported = 8; repeated string response_types_supported = 9; repeated string subject_types_supported = 10; repeated string id_token_signing_alg_values_supported = 11; repeated string code_challenge_methods_supported = 12; repeated string scopes_supported = 13; repeated string token_endpoint_auth_methods_supported = 14; repeated string claims_supported = 15; } // RefreshTokenRef contains the metadata for a refresh token that is managed by the storage. message RefreshTokenRef { // ID of the refresh token. string id = 1; string client_id = 2; int64 created_at = 5; int64 last_used = 6; } // ListRefreshReq is a request to enumerate the refresh tokens of a user. message ListRefreshReq { // The "sub" claim returned in the ID Token. string user_id = 1; } // ListRefreshResp returns a list of refresh tokens for a user. message ListRefreshResp { repeated RefreshTokenRef refresh_tokens = 1; } // RevokeRefreshReq is a request to revoke the refresh token of the user-client pair. message RevokeRefreshReq { // The "sub" claim returned in the ID Token. string user_id = 1; string client_id = 2; } // RevokeRefreshResp determines if the refresh token is revoked successfully. message RevokeRefreshResp { // Set to true is refresh token was not found and token could not be revoked. bool not_found = 1; } message VerifyPasswordReq { string email = 1; string password = 2; } message VerifyPasswordResp { bool verified = 1; bool not_found = 2; } // Dex represents the dex gRPC service. service Dex { // GetClient gets a client. rpc GetClient(GetClientReq) returns (GetClientResp) {}; // CreateClient creates a client. rpc CreateClient(CreateClientReq) returns (CreateClientResp) {}; // UpdateClient updates an existing client rpc UpdateClient(UpdateClientReq) returns (UpdateClientResp) {}; // DeleteClient deletes the provided client. rpc DeleteClient(DeleteClientReq) returns (DeleteClientResp) {}; // ListClients lists all client entries. rpc ListClients(ListClientReq) returns (ListClientResp) {}; // CreatePassword creates a password. rpc CreatePassword(CreatePasswordReq) returns (CreatePasswordResp) {}; // UpdatePassword modifies existing password. rpc UpdatePassword(UpdatePasswordReq) returns (UpdatePasswordResp) {}; // DeletePassword deletes the password. rpc DeletePassword(DeletePasswordReq) returns (DeletePasswordResp) {}; // ListPassword lists all password entries. rpc ListPasswords(ListPasswordReq) returns (ListPasswordResp) {}; // CreateConnector creates a connector. rpc CreateConnector(CreateConnectorReq) returns (CreateConnectorResp) {}; // UpdateConnector modifies existing connector. rpc UpdateConnector(UpdateConnectorReq) returns (UpdateConnectorResp) {}; // DeleteConnector deletes the connector. rpc DeleteConnector(DeleteConnectorReq) returns (DeleteConnectorResp) {}; // ListConnectors lists all connector entries. rpc ListConnectors(ListConnectorReq) returns (ListConnectorResp) {}; // GetVersion returns version information of the server. rpc GetVersion(VersionReq) returns (VersionResp) {}; // GetDiscovery returns discovery information of the server. rpc GetDiscovery(DiscoveryReq) returns (DiscoveryResp) {}; // ListRefresh lists all the refresh token entries for a particular user. rpc ListRefresh(ListRefreshReq) returns (ListRefreshResp) {}; // RevokeRefresh revokes the refresh token for the provided user-client pair. // // Note that each user-client pair can have only one refresh token at a time. rpc RevokeRefresh(RevokeRefreshReq) returns (RevokeRefreshResp) {}; // VerifyPassword returns whether a password matches a hash for a specific email or not. rpc VerifyPassword(VerifyPasswordReq) returns (VerifyPasswordResp) {}; }