blob: 6a3d59591eb8e5e81028848b31e0bc6ac3f8f38e [file] [log] [blame]
syntax = "proto3";
package oauth;
import "google/protobuf/duration.proto";
enum TokenType {
TOKEN_INVALID = 0;
TOKEN_JWT = 1;
}
enum SignatureAlgorithm {
ALG_NONE = 0;
ALG_RS256 = 1;
}
message MintTokenRequest {
TokenType token_type = 1;
// Algorithm for the signature of the token. Services shall not accept the
// value none in production.
SignatureAlgorithm alg = 2;
// Reserving: The field is deleted, but this makes it clear not to reuse the
// field number.
reserved 3;
// Reserving: The field is deleted, but this makes it clear not to reuse the
// field number.
reserved 4;
// How long the issued token will be valid for.
google.protobuf.Duration valid_for = 5;
message RedfishPrivileges {
repeated string privileges = 1;
}
oneof redfish_scope {
// Redfish roles issued to the client. See
// https://redfish.dmtf.org/schemas/DSP0266_1.15.0.html#roles for details.
string redfish_role = 6;
RedfishPrivileges redfish_privileges = 7;
}
}
message MintTokenResponse {
// The issued JWT token.
string token = 1;
}
message ExchangeRequest {
TokenType token_type = 1;
// Algorithm for the signature of the token. Services shall not accept the
// value none in production.
SignatureAlgorithm alg = 2;
// How long the issued token will be valid for.
google.protobuf.Duration valid_for = 5;
}
message ExchangeResponse {
// The issued JWT token.
string token = 1;
}
message HiscTokenRequest {
// The public key string, normally can get via SSHKey.ToPublicString().
optional string public_key = 1;
// The port id of the host interactive serial console provided by gBMC.
// The port id is the number in the host's node appendix number.
// i.e. host mvt19-n1 the node appendix is -n1 and it is mapping to port-1
// the hisc_port_id is 1.
// If the host does not have node appendix, it will be mapping to port-0.
optional uint32 hisc_port_id = 2;
// The token's valid life time, maximum is 30 minutes (1800 seconds)
optional uint32 token_lifetime_seconds = 3;
}
message HiscTokenResponse {
// The issued Hisc access token.
string token = 1;
}
service AuthorizationService {
// Mint tokens for another identity
rpc MintToken(MintTokenRequest) returns (MintTokenResponse);
// Mint tokens for the client itself; exchange its own identity to a Redfish
// role or a set of privileges
rpc Exchange(ExchangeRequest) returns (ExchangeResponse);
// go/gbmc-hisc, HiscToken API will be used to issue a token to
// access the specified host's serial console via TCP port 20022, which is a
// dedicated ssh service port (go/gbmc-ports).
// Technically, the token is gBMC self-signed ssh certificate with force
// command set to "/usr/libexec/ttf-console port-${hisc_port_id}". So this
// certificate will only be accepted by issuer gBMC's HISC ssh server.
rpc HiscToken(HiscTokenRequest) returns (HiscTokenResponse);
}