| 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); | |
| } |