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