diff --git a/api/api.pb.go b/api/api.pb.go
index 56574c092454a89436c1b040ba12b45eab2cafe4..5bac4e95142a039a19722686c0e7c4ec56b4b280 100644
--- a/api/api.pb.go
+++ b/api/api.pb.go
@@ -1,48 +1,16 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // source: api/api.proto
 
-/*
-Package api is a generated protocol buffer package.
-
-It is generated from these files:
-	api/api.proto
-
-It has these top-level messages:
-	Client
-	CreateClientReq
-	CreateClientResp
-	DeleteClientReq
-	DeleteClientResp
-	UpdateClientReq
-	UpdateClientResp
-	Password
-	CreatePasswordReq
-	CreatePasswordResp
-	UpdatePasswordReq
-	UpdatePasswordResp
-	DeletePasswordReq
-	DeletePasswordResp
-	ListPasswordReq
-	ListPasswordResp
-	VersionReq
-	VersionResp
-	RefreshTokenRef
-	ListRefreshReq
-	ListRefreshResp
-	RevokeRefreshReq
-	RevokeRefreshResp
-	VerifyPasswordReq
-	VerifyPasswordResp
-*/
 package api
 
-import proto "github.com/golang/protobuf/proto"
-import fmt "fmt"
-import math "math"
-
 import (
-	context "golang.org/x/net/context"
+	context "context"
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
 	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+	math "math"
 )
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -54,23 +22,46 @@ var _ = math.Inf
 // is compatible with the proto package it is being compiled against.
 // A compilation error at this line likely means your copy of the
 // proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
 
 // Client represents an OAuth2 client.
 type Client struct {
-	Id           string   `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
-	Secret       string   `protobuf:"bytes,2,opt,name=secret" json:"secret,omitempty"`
-	RedirectUris []string `protobuf:"bytes,3,rep,name=redirect_uris,json=redirectUris" json:"redirect_uris,omitempty"`
-	TrustedPeers []string `protobuf:"bytes,4,rep,name=trusted_peers,json=trustedPeers" json:"trusted_peers,omitempty"`
-	Public       bool     `protobuf:"varint,5,opt,name=public" json:"public,omitempty"`
-	Name         string   `protobuf:"bytes,6,opt,name=name" json:"name,omitempty"`
-	LogoUrl      string   `protobuf:"bytes,7,opt,name=logo_url,json=logoUrl" json:"logo_url,omitempty"`
+	Id                   string   `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	Secret               string   `protobuf:"bytes,2,opt,name=secret,proto3" json:"secret,omitempty"`
+	RedirectUris         []string `protobuf:"bytes,3,rep,name=redirect_uris,json=redirectUris,proto3" json:"redirect_uris,omitempty"`
+	TrustedPeers         []string `protobuf:"bytes,4,rep,name=trusted_peers,json=trustedPeers,proto3" json:"trusted_peers,omitempty"`
+	Public               bool     `protobuf:"varint,5,opt,name=public,proto3" json:"public,omitempty"`
+	Name                 string   `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
+	LogoUrl              string   `protobuf:"bytes,7,opt,name=logo_url,json=logoUrl,proto3" json:"logo_url,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *Client) Reset()                    { *m = Client{} }
-func (m *Client) String() string            { return proto.CompactTextString(m) }
-func (*Client) ProtoMessage()               {}
-func (*Client) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+func (m *Client) Reset()         { *m = Client{} }
+func (m *Client) String() string { return proto.CompactTextString(m) }
+func (*Client) ProtoMessage()    {}
+func (*Client) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{0}
+}
+
+func (m *Client) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Client.Unmarshal(m, b)
+}
+func (m *Client) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Client.Marshal(b, m, deterministic)
+}
+func (m *Client) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Client.Merge(m, src)
+}
+func (m *Client) XXX_Size() int {
+	return xxx_messageInfo_Client.Size(m)
+}
+func (m *Client) XXX_DiscardUnknown() {
+	xxx_messageInfo_Client.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Client proto.InternalMessageInfo
 
 func (m *Client) GetId() string {
 	if m != nil {
@@ -123,13 +114,36 @@ func (m *Client) GetLogoUrl() string {
 
 // CreateClientReq is a request to make a client.
 type CreateClientReq struct {
-	Client *Client `protobuf:"bytes,1,opt,name=client" json:"client,omitempty"`
+	Client               *Client  `protobuf:"bytes,1,opt,name=client,proto3" json:"client,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CreateClientReq) Reset()         { *m = CreateClientReq{} }
+func (m *CreateClientReq) String() string { return proto.CompactTextString(m) }
+func (*CreateClientReq) ProtoMessage()    {}
+func (*CreateClientReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{1}
 }
 
-func (m *CreateClientReq) Reset()                    { *m = CreateClientReq{} }
-func (m *CreateClientReq) String() string            { return proto.CompactTextString(m) }
-func (*CreateClientReq) ProtoMessage()               {}
-func (*CreateClientReq) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+func (m *CreateClientReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateClientReq.Unmarshal(m, b)
+}
+func (m *CreateClientReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateClientReq.Marshal(b, m, deterministic)
+}
+func (m *CreateClientReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateClientReq.Merge(m, src)
+}
+func (m *CreateClientReq) XXX_Size() int {
+	return xxx_messageInfo_CreateClientReq.Size(m)
+}
+func (m *CreateClientReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateClientReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateClientReq proto.InternalMessageInfo
 
 func (m *CreateClientReq) GetClient() *Client {
 	if m != nil {
@@ -140,14 +154,37 @@ func (m *CreateClientReq) GetClient() *Client {
 
 // CreateClientResp returns the response from creating a client.
 type CreateClientResp struct {
-	AlreadyExists bool    `protobuf:"varint,1,opt,name=already_exists,json=alreadyExists" json:"already_exists,omitempty"`
-	Client        *Client `protobuf:"bytes,2,opt,name=client" json:"client,omitempty"`
+	AlreadyExists        bool     `protobuf:"varint,1,opt,name=already_exists,json=alreadyExists,proto3" json:"already_exists,omitempty"`
+	Client               *Client  `protobuf:"bytes,2,opt,name=client,proto3" json:"client,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *CreateClientResp) Reset()                    { *m = CreateClientResp{} }
-func (m *CreateClientResp) String() string            { return proto.CompactTextString(m) }
-func (*CreateClientResp) ProtoMessage()               {}
-func (*CreateClientResp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+func (m *CreateClientResp) Reset()         { *m = CreateClientResp{} }
+func (m *CreateClientResp) String() string { return proto.CompactTextString(m) }
+func (*CreateClientResp) ProtoMessage()    {}
+func (*CreateClientResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{2}
+}
+
+func (m *CreateClientResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateClientResp.Unmarshal(m, b)
+}
+func (m *CreateClientResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateClientResp.Marshal(b, m, deterministic)
+}
+func (m *CreateClientResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateClientResp.Merge(m, src)
+}
+func (m *CreateClientResp) XXX_Size() int {
+	return xxx_messageInfo_CreateClientResp.Size(m)
+}
+func (m *CreateClientResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateClientResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateClientResp proto.InternalMessageInfo
 
 func (m *CreateClientResp) GetAlreadyExists() bool {
 	if m != nil {
@@ -166,13 +203,36 @@ func (m *CreateClientResp) GetClient() *Client {
 // DeleteClientReq is a request to delete a client.
 type DeleteClientReq struct {
 	// The ID of the client.
-	Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
+	Id                   string   `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DeleteClientReq) Reset()         { *m = DeleteClientReq{} }
+func (m *DeleteClientReq) String() string { return proto.CompactTextString(m) }
+func (*DeleteClientReq) ProtoMessage()    {}
+func (*DeleteClientReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{3}
+}
+
+func (m *DeleteClientReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeleteClientReq.Unmarshal(m, b)
+}
+func (m *DeleteClientReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeleteClientReq.Marshal(b, m, deterministic)
+}
+func (m *DeleteClientReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeleteClientReq.Merge(m, src)
+}
+func (m *DeleteClientReq) XXX_Size() int {
+	return xxx_messageInfo_DeleteClientReq.Size(m)
+}
+func (m *DeleteClientReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeleteClientReq.DiscardUnknown(m)
 }
 
-func (m *DeleteClientReq) Reset()                    { *m = DeleteClientReq{} }
-func (m *DeleteClientReq) String() string            { return proto.CompactTextString(m) }
-func (*DeleteClientReq) ProtoMessage()               {}
-func (*DeleteClientReq) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
+var xxx_messageInfo_DeleteClientReq proto.InternalMessageInfo
 
 func (m *DeleteClientReq) GetId() string {
 	if m != nil {
@@ -183,13 +243,36 @@ func (m *DeleteClientReq) GetId() string {
 
 // DeleteClientResp determines if the client is deleted successfully.
 type DeleteClientResp struct {
-	NotFound bool `protobuf:"varint,1,opt,name=not_found,json=notFound" json:"not_found,omitempty"`
+	NotFound             bool     `protobuf:"varint,1,opt,name=not_found,json=notFound,proto3" json:"not_found,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *DeleteClientResp) Reset()                    { *m = DeleteClientResp{} }
-func (m *DeleteClientResp) String() string            { return proto.CompactTextString(m) }
-func (*DeleteClientResp) ProtoMessage()               {}
-func (*DeleteClientResp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
+func (m *DeleteClientResp) Reset()         { *m = DeleteClientResp{} }
+func (m *DeleteClientResp) String() string { return proto.CompactTextString(m) }
+func (*DeleteClientResp) ProtoMessage()    {}
+func (*DeleteClientResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{4}
+}
+
+func (m *DeleteClientResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeleteClientResp.Unmarshal(m, b)
+}
+func (m *DeleteClientResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeleteClientResp.Marshal(b, m, deterministic)
+}
+func (m *DeleteClientResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeleteClientResp.Merge(m, src)
+}
+func (m *DeleteClientResp) XXX_Size() int {
+	return xxx_messageInfo_DeleteClientResp.Size(m)
+}
+func (m *DeleteClientResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeleteClientResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeleteClientResp proto.InternalMessageInfo
 
 func (m *DeleteClientResp) GetNotFound() bool {
 	if m != nil {
@@ -200,17 +283,40 @@ func (m *DeleteClientResp) GetNotFound() bool {
 
 // UpdateClientReq is a request to update an exisitng client.
 type UpdateClientReq struct {
-	Id           string   `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
-	RedirectUris []string `protobuf:"bytes,2,rep,name=redirect_uris,json=redirectUris" json:"redirect_uris,omitempty"`
-	TrustedPeers []string `protobuf:"bytes,3,rep,name=trusted_peers,json=trustedPeers" json:"trusted_peers,omitempty"`
-	Name         string   `protobuf:"bytes,4,opt,name=name" json:"name,omitempty"`
-	LogoUrl      string   `protobuf:"bytes,5,opt,name=logo_url,json=logoUrl" json:"logo_url,omitempty"`
+	Id                   string   `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	RedirectUris         []string `protobuf:"bytes,2,rep,name=redirect_uris,json=redirectUris,proto3" json:"redirect_uris,omitempty"`
+	TrustedPeers         []string `protobuf:"bytes,3,rep,name=trusted_peers,json=trustedPeers,proto3" json:"trusted_peers,omitempty"`
+	Name                 string   `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	LogoUrl              string   `protobuf:"bytes,5,opt,name=logo_url,json=logoUrl,proto3" json:"logo_url,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *UpdateClientReq) Reset()                    { *m = UpdateClientReq{} }
-func (m *UpdateClientReq) String() string            { return proto.CompactTextString(m) }
-func (*UpdateClientReq) ProtoMessage()               {}
-func (*UpdateClientReq) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
+func (m *UpdateClientReq) Reset()         { *m = UpdateClientReq{} }
+func (m *UpdateClientReq) String() string { return proto.CompactTextString(m) }
+func (*UpdateClientReq) ProtoMessage()    {}
+func (*UpdateClientReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{5}
+}
+
+func (m *UpdateClientReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UpdateClientReq.Unmarshal(m, b)
+}
+func (m *UpdateClientReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UpdateClientReq.Marshal(b, m, deterministic)
+}
+func (m *UpdateClientReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UpdateClientReq.Merge(m, src)
+}
+func (m *UpdateClientReq) XXX_Size() int {
+	return xxx_messageInfo_UpdateClientReq.Size(m)
+}
+func (m *UpdateClientReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_UpdateClientReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UpdateClientReq proto.InternalMessageInfo
 
 func (m *UpdateClientReq) GetId() string {
 	if m != nil {
@@ -249,13 +355,36 @@ func (m *UpdateClientReq) GetLogoUrl() string {
 
 // UpdateClientResp returns the reponse form updating a client.
 type UpdateClientResp struct {
-	NotFound bool `protobuf:"varint,1,opt,name=not_found,json=notFound" json:"not_found,omitempty"`
+	NotFound             bool     `protobuf:"varint,1,opt,name=not_found,json=notFound,proto3" json:"not_found,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *UpdateClientResp) Reset()                    { *m = UpdateClientResp{} }
-func (m *UpdateClientResp) String() string            { return proto.CompactTextString(m) }
-func (*UpdateClientResp) ProtoMessage()               {}
-func (*UpdateClientResp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
+func (m *UpdateClientResp) Reset()         { *m = UpdateClientResp{} }
+func (m *UpdateClientResp) String() string { return proto.CompactTextString(m) }
+func (*UpdateClientResp) ProtoMessage()    {}
+func (*UpdateClientResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{6}
+}
+
+func (m *UpdateClientResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UpdateClientResp.Unmarshal(m, b)
+}
+func (m *UpdateClientResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UpdateClientResp.Marshal(b, m, deterministic)
+}
+func (m *UpdateClientResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UpdateClientResp.Merge(m, src)
+}
+func (m *UpdateClientResp) XXX_Size() int {
+	return xxx_messageInfo_UpdateClientResp.Size(m)
+}
+func (m *UpdateClientResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_UpdateClientResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UpdateClientResp proto.InternalMessageInfo
 
 func (m *UpdateClientResp) GetNotFound() bool {
 	if m != nil {
@@ -266,17 +395,40 @@ func (m *UpdateClientResp) GetNotFound() bool {
 
 // Password is an email for password mapping managed by the storage.
 type Password struct {
-	Email string `protobuf:"bytes,1,opt,name=email" json:"email,omitempty"`
+	Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"`
 	// Currently we do not accept plain text passwords. Could be an option in the future.
-	Hash     []byte `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"`
-	Username string `protobuf:"bytes,3,opt,name=username" json:"username,omitempty"`
-	UserId   string `protobuf:"bytes,4,opt,name=user_id,json=userId" json:"user_id,omitempty"`
+	Hash                 []byte   `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"`
+	Username             string   `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"`
+	UserId               string   `protobuf:"bytes,4,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Password) Reset()         { *m = Password{} }
+func (m *Password) String() string { return proto.CompactTextString(m) }
+func (*Password) ProtoMessage()    {}
+func (*Password) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{7}
+}
+
+func (m *Password) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Password.Unmarshal(m, b)
+}
+func (m *Password) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Password.Marshal(b, m, deterministic)
+}
+func (m *Password) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Password.Merge(m, src)
+}
+func (m *Password) XXX_Size() int {
+	return xxx_messageInfo_Password.Size(m)
+}
+func (m *Password) XXX_DiscardUnknown() {
+	xxx_messageInfo_Password.DiscardUnknown(m)
 }
 
-func (m *Password) Reset()                    { *m = Password{} }
-func (m *Password) String() string            { return proto.CompactTextString(m) }
-func (*Password) ProtoMessage()               {}
-func (*Password) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
+var xxx_messageInfo_Password proto.InternalMessageInfo
 
 func (m *Password) GetEmail() string {
 	if m != nil {
@@ -308,13 +460,36 @@ func (m *Password) GetUserId() string {
 
 // CreatePasswordReq is a request to make a password.
 type CreatePasswordReq struct {
-	Password *Password `protobuf:"bytes,1,opt,name=password" json:"password,omitempty"`
+	Password             *Password `protobuf:"bytes,1,opt,name=password,proto3" json:"password,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
+	XXX_unrecognized     []byte    `json:"-"`
+	XXX_sizecache        int32     `json:"-"`
 }
 
-func (m *CreatePasswordReq) Reset()                    { *m = CreatePasswordReq{} }
-func (m *CreatePasswordReq) String() string            { return proto.CompactTextString(m) }
-func (*CreatePasswordReq) ProtoMessage()               {}
-func (*CreatePasswordReq) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
+func (m *CreatePasswordReq) Reset()         { *m = CreatePasswordReq{} }
+func (m *CreatePasswordReq) String() string { return proto.CompactTextString(m) }
+func (*CreatePasswordReq) ProtoMessage()    {}
+func (*CreatePasswordReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{8}
+}
+
+func (m *CreatePasswordReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreatePasswordReq.Unmarshal(m, b)
+}
+func (m *CreatePasswordReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreatePasswordReq.Marshal(b, m, deterministic)
+}
+func (m *CreatePasswordReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreatePasswordReq.Merge(m, src)
+}
+func (m *CreatePasswordReq) XXX_Size() int {
+	return xxx_messageInfo_CreatePasswordReq.Size(m)
+}
+func (m *CreatePasswordReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreatePasswordReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreatePasswordReq proto.InternalMessageInfo
 
 func (m *CreatePasswordReq) GetPassword() *Password {
 	if m != nil {
@@ -325,13 +500,36 @@ func (m *CreatePasswordReq) GetPassword() *Password {
 
 // CreatePasswordResp returns the response from creating a password.
 type CreatePasswordResp struct {
-	AlreadyExists bool `protobuf:"varint,1,opt,name=already_exists,json=alreadyExists" json:"already_exists,omitempty"`
+	AlreadyExists        bool     `protobuf:"varint,1,opt,name=already_exists,json=alreadyExists,proto3" json:"already_exists,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *CreatePasswordResp) Reset()                    { *m = CreatePasswordResp{} }
-func (m *CreatePasswordResp) String() string            { return proto.CompactTextString(m) }
-func (*CreatePasswordResp) ProtoMessage()               {}
-func (*CreatePasswordResp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
+func (m *CreatePasswordResp) Reset()         { *m = CreatePasswordResp{} }
+func (m *CreatePasswordResp) String() string { return proto.CompactTextString(m) }
+func (*CreatePasswordResp) ProtoMessage()    {}
+func (*CreatePasswordResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{9}
+}
+
+func (m *CreatePasswordResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreatePasswordResp.Unmarshal(m, b)
+}
+func (m *CreatePasswordResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreatePasswordResp.Marshal(b, m, deterministic)
+}
+func (m *CreatePasswordResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreatePasswordResp.Merge(m, src)
+}
+func (m *CreatePasswordResp) XXX_Size() int {
+	return xxx_messageInfo_CreatePasswordResp.Size(m)
+}
+func (m *CreatePasswordResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreatePasswordResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreatePasswordResp proto.InternalMessageInfo
 
 func (m *CreatePasswordResp) GetAlreadyExists() bool {
 	if m != nil {
@@ -343,15 +541,38 @@ func (m *CreatePasswordResp) GetAlreadyExists() bool {
 // UpdatePasswordReq is a request to modify an existing password.
 type UpdatePasswordReq struct {
 	// The email used to lookup the password. This field cannot be modified
-	Email       string `protobuf:"bytes,1,opt,name=email" json:"email,omitempty"`
-	NewHash     []byte `protobuf:"bytes,2,opt,name=new_hash,json=newHash,proto3" json:"new_hash,omitempty"`
-	NewUsername string `protobuf:"bytes,3,opt,name=new_username,json=newUsername" json:"new_username,omitempty"`
+	Email                string   `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"`
+	NewHash              []byte   `protobuf:"bytes,2,opt,name=new_hash,json=newHash,proto3" json:"new_hash,omitempty"`
+	NewUsername          string   `protobuf:"bytes,3,opt,name=new_username,json=newUsername,proto3" json:"new_username,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UpdatePasswordReq) Reset()         { *m = UpdatePasswordReq{} }
+func (m *UpdatePasswordReq) String() string { return proto.CompactTextString(m) }
+func (*UpdatePasswordReq) ProtoMessage()    {}
+func (*UpdatePasswordReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{10}
+}
+
+func (m *UpdatePasswordReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UpdatePasswordReq.Unmarshal(m, b)
+}
+func (m *UpdatePasswordReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UpdatePasswordReq.Marshal(b, m, deterministic)
+}
+func (m *UpdatePasswordReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UpdatePasswordReq.Merge(m, src)
+}
+func (m *UpdatePasswordReq) XXX_Size() int {
+	return xxx_messageInfo_UpdatePasswordReq.Size(m)
+}
+func (m *UpdatePasswordReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_UpdatePasswordReq.DiscardUnknown(m)
 }
 
-func (m *UpdatePasswordReq) Reset()                    { *m = UpdatePasswordReq{} }
-func (m *UpdatePasswordReq) String() string            { return proto.CompactTextString(m) }
-func (*UpdatePasswordReq) ProtoMessage()               {}
-func (*UpdatePasswordReq) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
+var xxx_messageInfo_UpdatePasswordReq proto.InternalMessageInfo
 
 func (m *UpdatePasswordReq) GetEmail() string {
 	if m != nil {
@@ -376,13 +597,36 @@ func (m *UpdatePasswordReq) GetNewUsername() string {
 
 // UpdatePasswordResp returns the response from modifying an existing password.
 type UpdatePasswordResp struct {
-	NotFound bool `protobuf:"varint,1,opt,name=not_found,json=notFound" json:"not_found,omitempty"`
+	NotFound             bool     `protobuf:"varint,1,opt,name=not_found,json=notFound,proto3" json:"not_found,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UpdatePasswordResp) Reset()         { *m = UpdatePasswordResp{} }
+func (m *UpdatePasswordResp) String() string { return proto.CompactTextString(m) }
+func (*UpdatePasswordResp) ProtoMessage()    {}
+func (*UpdatePasswordResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{11}
+}
+
+func (m *UpdatePasswordResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UpdatePasswordResp.Unmarshal(m, b)
+}
+func (m *UpdatePasswordResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UpdatePasswordResp.Marshal(b, m, deterministic)
+}
+func (m *UpdatePasswordResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UpdatePasswordResp.Merge(m, src)
+}
+func (m *UpdatePasswordResp) XXX_Size() int {
+	return xxx_messageInfo_UpdatePasswordResp.Size(m)
+}
+func (m *UpdatePasswordResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_UpdatePasswordResp.DiscardUnknown(m)
 }
 
-func (m *UpdatePasswordResp) Reset()                    { *m = UpdatePasswordResp{} }
-func (m *UpdatePasswordResp) String() string            { return proto.CompactTextString(m) }
-func (*UpdatePasswordResp) ProtoMessage()               {}
-func (*UpdatePasswordResp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
+var xxx_messageInfo_UpdatePasswordResp proto.InternalMessageInfo
 
 func (m *UpdatePasswordResp) GetNotFound() bool {
 	if m != nil {
@@ -393,13 +637,36 @@ func (m *UpdatePasswordResp) GetNotFound() bool {
 
 // DeletePasswordReq is a request to delete a password.
 type DeletePasswordReq struct {
-	Email string `protobuf:"bytes,1,opt,name=email" json:"email,omitempty"`
+	Email                string   `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *DeletePasswordReq) Reset()                    { *m = DeletePasswordReq{} }
-func (m *DeletePasswordReq) String() string            { return proto.CompactTextString(m) }
-func (*DeletePasswordReq) ProtoMessage()               {}
-func (*DeletePasswordReq) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
+func (m *DeletePasswordReq) Reset()         { *m = DeletePasswordReq{} }
+func (m *DeletePasswordReq) String() string { return proto.CompactTextString(m) }
+func (*DeletePasswordReq) ProtoMessage()    {}
+func (*DeletePasswordReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{12}
+}
+
+func (m *DeletePasswordReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeletePasswordReq.Unmarshal(m, b)
+}
+func (m *DeletePasswordReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeletePasswordReq.Marshal(b, m, deterministic)
+}
+func (m *DeletePasswordReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeletePasswordReq.Merge(m, src)
+}
+func (m *DeletePasswordReq) XXX_Size() int {
+	return xxx_messageInfo_DeletePasswordReq.Size(m)
+}
+func (m *DeletePasswordReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeletePasswordReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeletePasswordReq proto.InternalMessageInfo
 
 func (m *DeletePasswordReq) GetEmail() string {
 	if m != nil {
@@ -410,13 +677,36 @@ func (m *DeletePasswordReq) GetEmail() string {
 
 // DeletePasswordResp returns the response from deleting a password.
 type DeletePasswordResp struct {
-	NotFound bool `protobuf:"varint,1,opt,name=not_found,json=notFound" json:"not_found,omitempty"`
+	NotFound             bool     `protobuf:"varint,1,opt,name=not_found,json=notFound,proto3" json:"not_found,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *DeletePasswordResp) Reset()                    { *m = DeletePasswordResp{} }
-func (m *DeletePasswordResp) String() string            { return proto.CompactTextString(m) }
-func (*DeletePasswordResp) ProtoMessage()               {}
-func (*DeletePasswordResp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
+func (m *DeletePasswordResp) Reset()         { *m = DeletePasswordResp{} }
+func (m *DeletePasswordResp) String() string { return proto.CompactTextString(m) }
+func (*DeletePasswordResp) ProtoMessage()    {}
+func (*DeletePasswordResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{13}
+}
+
+func (m *DeletePasswordResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeletePasswordResp.Unmarshal(m, b)
+}
+func (m *DeletePasswordResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeletePasswordResp.Marshal(b, m, deterministic)
+}
+func (m *DeletePasswordResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeletePasswordResp.Merge(m, src)
+}
+func (m *DeletePasswordResp) XXX_Size() int {
+	return xxx_messageInfo_DeletePasswordResp.Size(m)
+}
+func (m *DeletePasswordResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeletePasswordResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeletePasswordResp proto.InternalMessageInfo
 
 func (m *DeletePasswordResp) GetNotFound() bool {
 	if m != nil {
@@ -427,22 +717,68 @@ func (m *DeletePasswordResp) GetNotFound() bool {
 
 // ListPasswordReq is a request to enumerate passwords.
 type ListPasswordReq struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *ListPasswordReq) Reset()                    { *m = ListPasswordReq{} }
-func (m *ListPasswordReq) String() string            { return proto.CompactTextString(m) }
-func (*ListPasswordReq) ProtoMessage()               {}
-func (*ListPasswordReq) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
+func (m *ListPasswordReq) Reset()         { *m = ListPasswordReq{} }
+func (m *ListPasswordReq) String() string { return proto.CompactTextString(m) }
+func (*ListPasswordReq) ProtoMessage()    {}
+func (*ListPasswordReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{14}
+}
+
+func (m *ListPasswordReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListPasswordReq.Unmarshal(m, b)
+}
+func (m *ListPasswordReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListPasswordReq.Marshal(b, m, deterministic)
+}
+func (m *ListPasswordReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListPasswordReq.Merge(m, src)
+}
+func (m *ListPasswordReq) XXX_Size() int {
+	return xxx_messageInfo_ListPasswordReq.Size(m)
+}
+func (m *ListPasswordReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListPasswordReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListPasswordReq proto.InternalMessageInfo
 
 // ListPasswordResp returns a list of passwords.
 type ListPasswordResp struct {
-	Passwords []*Password `protobuf:"bytes,1,rep,name=passwords" json:"passwords,omitempty"`
+	Passwords            []*Password `protobuf:"bytes,1,rep,name=passwords,proto3" json:"passwords,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *ListPasswordResp) Reset()         { *m = ListPasswordResp{} }
+func (m *ListPasswordResp) String() string { return proto.CompactTextString(m) }
+func (*ListPasswordResp) ProtoMessage()    {}
+func (*ListPasswordResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{15}
 }
 
-func (m *ListPasswordResp) Reset()                    { *m = ListPasswordResp{} }
-func (m *ListPasswordResp) String() string            { return proto.CompactTextString(m) }
-func (*ListPasswordResp) ProtoMessage()               {}
-func (*ListPasswordResp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
+func (m *ListPasswordResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListPasswordResp.Unmarshal(m, b)
+}
+func (m *ListPasswordResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListPasswordResp.Marshal(b, m, deterministic)
+}
+func (m *ListPasswordResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListPasswordResp.Merge(m, src)
+}
+func (m *ListPasswordResp) XXX_Size() int {
+	return xxx_messageInfo_ListPasswordResp.Size(m)
+}
+func (m *ListPasswordResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListPasswordResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListPasswordResp proto.InternalMessageInfo
 
 func (m *ListPasswordResp) GetPasswords() []*Password {
 	if m != nil {
@@ -453,26 +789,72 @@ func (m *ListPasswordResp) GetPasswords() []*Password {
 
 // VersionReq is a request to fetch version info.
 type VersionReq struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *VersionReq) Reset()                    { *m = VersionReq{} }
-func (m *VersionReq) String() string            { return proto.CompactTextString(m) }
-func (*VersionReq) ProtoMessage()               {}
-func (*VersionReq) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
+func (m *VersionReq) Reset()         { *m = VersionReq{} }
+func (m *VersionReq) String() string { return proto.CompactTextString(m) }
+func (*VersionReq) ProtoMessage()    {}
+func (*VersionReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{16}
+}
+
+func (m *VersionReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VersionReq.Unmarshal(m, b)
+}
+func (m *VersionReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VersionReq.Marshal(b, m, deterministic)
+}
+func (m *VersionReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VersionReq.Merge(m, src)
+}
+func (m *VersionReq) XXX_Size() int {
+	return xxx_messageInfo_VersionReq.Size(m)
+}
+func (m *VersionReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_VersionReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VersionReq proto.InternalMessageInfo
 
 // VersionResp holds the version info of components.
 type VersionResp struct {
 	// Semantic version of the server.
-	Server string `protobuf:"bytes,1,opt,name=server" json:"server,omitempty"`
+	Server string `protobuf:"bytes,1,opt,name=server,proto3" json:"server,omitempty"`
 	// Numeric version of the API. It increases everytime a new call is added to the API.
 	// Clients should use this info to determine if the server supports specific features.
-	Api int32 `protobuf:"varint,2,opt,name=api" json:"api,omitempty"`
+	Api                  int32    `protobuf:"varint,2,opt,name=api,proto3" json:"api,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *VersionResp) Reset()                    { *m = VersionResp{} }
-func (m *VersionResp) String() string            { return proto.CompactTextString(m) }
-func (*VersionResp) ProtoMessage()               {}
-func (*VersionResp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
+func (m *VersionResp) Reset()         { *m = VersionResp{} }
+func (m *VersionResp) String() string { return proto.CompactTextString(m) }
+func (*VersionResp) ProtoMessage()    {}
+func (*VersionResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{17}
+}
+
+func (m *VersionResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VersionResp.Unmarshal(m, b)
+}
+func (m *VersionResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VersionResp.Marshal(b, m, deterministic)
+}
+func (m *VersionResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VersionResp.Merge(m, src)
+}
+func (m *VersionResp) XXX_Size() int {
+	return xxx_messageInfo_VersionResp.Size(m)
+}
+func (m *VersionResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_VersionResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VersionResp proto.InternalMessageInfo
 
 func (m *VersionResp) GetServer() string {
 	if m != nil {
@@ -491,16 +873,39 @@ func (m *VersionResp) GetApi() int32 {
 // RefreshTokenRef contains the metadata for a refresh token that is managed by the storage.
 type RefreshTokenRef struct {
 	// ID of the refresh token.
-	Id        string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
-	ClientId  string `protobuf:"bytes,2,opt,name=client_id,json=clientId" json:"client_id,omitempty"`
-	CreatedAt int64  `protobuf:"varint,5,opt,name=created_at,json=createdAt" json:"created_at,omitempty"`
-	LastUsed  int64  `protobuf:"varint,6,opt,name=last_used,json=lastUsed" json:"last_used,omitempty"`
+	Id                   string   `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	ClientId             string   `protobuf:"bytes,2,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"`
+	CreatedAt            int64    `protobuf:"varint,5,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
+	LastUsed             int64    `protobuf:"varint,6,opt,name=last_used,json=lastUsed,proto3" json:"last_used,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *RefreshTokenRef) Reset()         { *m = RefreshTokenRef{} }
+func (m *RefreshTokenRef) String() string { return proto.CompactTextString(m) }
+func (*RefreshTokenRef) ProtoMessage()    {}
+func (*RefreshTokenRef) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{18}
+}
+
+func (m *RefreshTokenRef) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RefreshTokenRef.Unmarshal(m, b)
+}
+func (m *RefreshTokenRef) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RefreshTokenRef.Marshal(b, m, deterministic)
+}
+func (m *RefreshTokenRef) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RefreshTokenRef.Merge(m, src)
+}
+func (m *RefreshTokenRef) XXX_Size() int {
+	return xxx_messageInfo_RefreshTokenRef.Size(m)
+}
+func (m *RefreshTokenRef) XXX_DiscardUnknown() {
+	xxx_messageInfo_RefreshTokenRef.DiscardUnknown(m)
 }
 
-func (m *RefreshTokenRef) Reset()                    { *m = RefreshTokenRef{} }
-func (m *RefreshTokenRef) String() string            { return proto.CompactTextString(m) }
-func (*RefreshTokenRef) ProtoMessage()               {}
-func (*RefreshTokenRef) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
+var xxx_messageInfo_RefreshTokenRef proto.InternalMessageInfo
 
 func (m *RefreshTokenRef) GetId() string {
 	if m != nil {
@@ -533,13 +938,36 @@ func (m *RefreshTokenRef) GetLastUsed() int64 {
 // ListRefreshReq is a request to enumerate the refresh tokens of a user.
 type ListRefreshReq struct {
 	// The "sub" claim returned in the ID Token.
-	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId" json:"user_id,omitempty"`
+	UserId               string   `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListRefreshReq) Reset()         { *m = ListRefreshReq{} }
+func (m *ListRefreshReq) String() string { return proto.CompactTextString(m) }
+func (*ListRefreshReq) ProtoMessage()    {}
+func (*ListRefreshReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{19}
 }
 
-func (m *ListRefreshReq) Reset()                    { *m = ListRefreshReq{} }
-func (m *ListRefreshReq) String() string            { return proto.CompactTextString(m) }
-func (*ListRefreshReq) ProtoMessage()               {}
-func (*ListRefreshReq) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
+func (m *ListRefreshReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListRefreshReq.Unmarshal(m, b)
+}
+func (m *ListRefreshReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListRefreshReq.Marshal(b, m, deterministic)
+}
+func (m *ListRefreshReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListRefreshReq.Merge(m, src)
+}
+func (m *ListRefreshReq) XXX_Size() int {
+	return xxx_messageInfo_ListRefreshReq.Size(m)
+}
+func (m *ListRefreshReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListRefreshReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListRefreshReq proto.InternalMessageInfo
 
 func (m *ListRefreshReq) GetUserId() string {
 	if m != nil {
@@ -550,13 +978,36 @@ func (m *ListRefreshReq) GetUserId() string {
 
 // ListRefreshResp returns a list of refresh tokens for a user.
 type ListRefreshResp struct {
-	RefreshTokens []*RefreshTokenRef `protobuf:"bytes,1,rep,name=refresh_tokens,json=refreshTokens" json:"refresh_tokens,omitempty"`
+	RefreshTokens        []*RefreshTokenRef `protobuf:"bytes,1,rep,name=refresh_tokens,json=refreshTokens,proto3" json:"refresh_tokens,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
+}
+
+func (m *ListRefreshResp) Reset()         { *m = ListRefreshResp{} }
+func (m *ListRefreshResp) String() string { return proto.CompactTextString(m) }
+func (*ListRefreshResp) ProtoMessage()    {}
+func (*ListRefreshResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{20}
+}
+
+func (m *ListRefreshResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListRefreshResp.Unmarshal(m, b)
+}
+func (m *ListRefreshResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListRefreshResp.Marshal(b, m, deterministic)
+}
+func (m *ListRefreshResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListRefreshResp.Merge(m, src)
+}
+func (m *ListRefreshResp) XXX_Size() int {
+	return xxx_messageInfo_ListRefreshResp.Size(m)
+}
+func (m *ListRefreshResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListRefreshResp.DiscardUnknown(m)
 }
 
-func (m *ListRefreshResp) Reset()                    { *m = ListRefreshResp{} }
-func (m *ListRefreshResp) String() string            { return proto.CompactTextString(m) }
-func (*ListRefreshResp) ProtoMessage()               {}
-func (*ListRefreshResp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
+var xxx_messageInfo_ListRefreshResp proto.InternalMessageInfo
 
 func (m *ListRefreshResp) GetRefreshTokens() []*RefreshTokenRef {
 	if m != nil {
@@ -568,14 +1019,37 @@ func (m *ListRefreshResp) GetRefreshTokens() []*RefreshTokenRef {
 // RevokeRefreshReq is a request to revoke the refresh token of the user-client pair.
 type RevokeRefreshReq struct {
 	// The "sub" claim returned in the ID Token.
-	UserId   string `protobuf:"bytes,1,opt,name=user_id,json=userId" json:"user_id,omitempty"`
-	ClientId string `protobuf:"bytes,2,opt,name=client_id,json=clientId" json:"client_id,omitempty"`
+	UserId               string   `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
+	ClientId             string   `protobuf:"bytes,2,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *RevokeRefreshReq) Reset()                    { *m = RevokeRefreshReq{} }
-func (m *RevokeRefreshReq) String() string            { return proto.CompactTextString(m) }
-func (*RevokeRefreshReq) ProtoMessage()               {}
-func (*RevokeRefreshReq) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
+func (m *RevokeRefreshReq) Reset()         { *m = RevokeRefreshReq{} }
+func (m *RevokeRefreshReq) String() string { return proto.CompactTextString(m) }
+func (*RevokeRefreshReq) ProtoMessage()    {}
+func (*RevokeRefreshReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{21}
+}
+
+func (m *RevokeRefreshReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RevokeRefreshReq.Unmarshal(m, b)
+}
+func (m *RevokeRefreshReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RevokeRefreshReq.Marshal(b, m, deterministic)
+}
+func (m *RevokeRefreshReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RevokeRefreshReq.Merge(m, src)
+}
+func (m *RevokeRefreshReq) XXX_Size() int {
+	return xxx_messageInfo_RevokeRefreshReq.Size(m)
+}
+func (m *RevokeRefreshReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_RevokeRefreshReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RevokeRefreshReq proto.InternalMessageInfo
 
 func (m *RevokeRefreshReq) GetUserId() string {
 	if m != nil {
@@ -594,13 +1068,36 @@ func (m *RevokeRefreshReq) GetClientId() string {
 // RevokeRefreshResp determines if the refresh token is revoked successfully.
 type RevokeRefreshResp struct {
 	// Set to true is refresh token was not found and token could not be revoked.
-	NotFound bool `protobuf:"varint,1,opt,name=not_found,json=notFound" json:"not_found,omitempty"`
+	NotFound             bool     `protobuf:"varint,1,opt,name=not_found,json=notFound,proto3" json:"not_found,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *RevokeRefreshResp) Reset()         { *m = RevokeRefreshResp{} }
+func (m *RevokeRefreshResp) String() string { return proto.CompactTextString(m) }
+func (*RevokeRefreshResp) ProtoMessage()    {}
+func (*RevokeRefreshResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{22}
+}
+
+func (m *RevokeRefreshResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RevokeRefreshResp.Unmarshal(m, b)
+}
+func (m *RevokeRefreshResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RevokeRefreshResp.Marshal(b, m, deterministic)
+}
+func (m *RevokeRefreshResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RevokeRefreshResp.Merge(m, src)
+}
+func (m *RevokeRefreshResp) XXX_Size() int {
+	return xxx_messageInfo_RevokeRefreshResp.Size(m)
+}
+func (m *RevokeRefreshResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_RevokeRefreshResp.DiscardUnknown(m)
 }
 
-func (m *RevokeRefreshResp) Reset()                    { *m = RevokeRefreshResp{} }
-func (m *RevokeRefreshResp) String() string            { return proto.CompactTextString(m) }
-func (*RevokeRefreshResp) ProtoMessage()               {}
-func (*RevokeRefreshResp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
+var xxx_messageInfo_RevokeRefreshResp proto.InternalMessageInfo
 
 func (m *RevokeRefreshResp) GetNotFound() bool {
 	if m != nil {
@@ -610,14 +1107,37 @@ func (m *RevokeRefreshResp) GetNotFound() bool {
 }
 
 type VerifyPasswordReq struct {
-	Email    string `protobuf:"bytes,1,opt,name=email" json:"email,omitempty"`
-	Password string `protobuf:"bytes,2,opt,name=password" json:"password,omitempty"`
+	Email                string   `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"`
+	Password             string   `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *VerifyPasswordReq) Reset()         { *m = VerifyPasswordReq{} }
+func (m *VerifyPasswordReq) String() string { return proto.CompactTextString(m) }
+func (*VerifyPasswordReq) ProtoMessage()    {}
+func (*VerifyPasswordReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{23}
 }
 
-func (m *VerifyPasswordReq) Reset()                    { *m = VerifyPasswordReq{} }
-func (m *VerifyPasswordReq) String() string            { return proto.CompactTextString(m) }
-func (*VerifyPasswordReq) ProtoMessage()               {}
-func (*VerifyPasswordReq) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
+func (m *VerifyPasswordReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VerifyPasswordReq.Unmarshal(m, b)
+}
+func (m *VerifyPasswordReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VerifyPasswordReq.Marshal(b, m, deterministic)
+}
+func (m *VerifyPasswordReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VerifyPasswordReq.Merge(m, src)
+}
+func (m *VerifyPasswordReq) XXX_Size() int {
+	return xxx_messageInfo_VerifyPasswordReq.Size(m)
+}
+func (m *VerifyPasswordReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_VerifyPasswordReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VerifyPasswordReq proto.InternalMessageInfo
 
 func (m *VerifyPasswordReq) GetEmail() string {
 	if m != nil {
@@ -634,14 +1154,37 @@ func (m *VerifyPasswordReq) GetPassword() string {
 }
 
 type VerifyPasswordResp struct {
-	Verified bool `protobuf:"varint,1,opt,name=verified" json:"verified,omitempty"`
-	NotFound bool `protobuf:"varint,2,opt,name=not_found,json=notFound" json:"not_found,omitempty"`
+	Verified             bool     `protobuf:"varint,1,opt,name=verified,proto3" json:"verified,omitempty"`
+	NotFound             bool     `protobuf:"varint,2,opt,name=not_found,json=notFound,proto3" json:"not_found,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *VerifyPasswordResp) Reset()                    { *m = VerifyPasswordResp{} }
-func (m *VerifyPasswordResp) String() string            { return proto.CompactTextString(m) }
-func (*VerifyPasswordResp) ProtoMessage()               {}
-func (*VerifyPasswordResp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
+func (m *VerifyPasswordResp) Reset()         { *m = VerifyPasswordResp{} }
+func (m *VerifyPasswordResp) String() string { return proto.CompactTextString(m) }
+func (*VerifyPasswordResp) ProtoMessage()    {}
+func (*VerifyPasswordResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1b40cafcd4234784, []int{24}
+}
+
+func (m *VerifyPasswordResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VerifyPasswordResp.Unmarshal(m, b)
+}
+func (m *VerifyPasswordResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VerifyPasswordResp.Marshal(b, m, deterministic)
+}
+func (m *VerifyPasswordResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VerifyPasswordResp.Merge(m, src)
+}
+func (m *VerifyPasswordResp) XXX_Size() int {
+	return xxx_messageInfo_VerifyPasswordResp.Size(m)
+}
+func (m *VerifyPasswordResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_VerifyPasswordResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VerifyPasswordResp proto.InternalMessageInfo
 
 func (m *VerifyPasswordResp) GetVerified() bool {
 	if m != nil {
@@ -685,6 +1228,69 @@ func init() {
 	proto.RegisterType((*VerifyPasswordResp)(nil), "api.VerifyPasswordResp")
 }
 
+func init() { proto.RegisterFile("api/api.proto", fileDescriptor_1b40cafcd4234784) }
+
+var fileDescriptor_1b40cafcd4234784 = []byte{
+	// 905 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0xeb, 0x6e, 0xdb, 0x36,
+	0x14, 0xb6, 0xad, 0xd8, 0x96, 0x8f, 0xef, 0x9c, 0x9b, 0xba, 0x2e, 0x06, 0xa4, 0x2c, 0x06, 0xa4,
+	0x18, 0xe0, 0xac, 0x1d, 0xb0, 0x01, 0x2b, 0xd6, 0x5d, 0xd2, 0x6e, 0x2d, 0xb0, 0x0d, 0x85, 0x30,
+	0xe7, 0xe7, 0x04, 0xc5, 0x3a, 0x4e, 0x88, 0x28, 0x92, 0x46, 0xd2, 0x71, 0xb2, 0x47, 0xd9, 0xdb,
+	0xec, 0xd7, 0x5e, 0xab, 0x20, 0x45, 0x29, 0xba, 0x38, 0x71, 0xfe, 0xf9, 0x7c, 0xe2, 0xb9, 0x7d,
+	0x87, 0xe7, 0xa3, 0xa1, 0xef, 0xc5, 0xec, 0xc8, 0x8b, 0xd9, 0x3c, 0xe6, 0x91, 0x8c, 0x88, 0xe5,
+	0xc5, 0x8c, 0xfe, 0x57, 0x87, 0xd6, 0x71, 0xc0, 0x30, 0x94, 0x64, 0x00, 0x0d, 0xe6, 0x4f, 0xeb,
+	0x07, 0xf5, 0xc3, 0x8e, 0xd3, 0x60, 0x3e, 0xd9, 0x87, 0x96, 0xc0, 0x25, 0x47, 0x39, 0x6d, 0x68,
+	0xcc, 0x58, 0xe4, 0x39, 0xf4, 0x39, 0xfa, 0x8c, 0xe3, 0x52, 0xba, 0x6b, 0xce, 0xc4, 0xd4, 0x3a,
+	0xb0, 0x0e, 0x3b, 0x4e, 0x2f, 0x05, 0x17, 0x9c, 0x09, 0x75, 0x48, 0xf2, 0xb5, 0x90, 0xe8, 0xbb,
+	0x31, 0x22, 0x17, 0xd3, 0xbd, 0xe4, 0x90, 0x01, 0x3f, 0x2a, 0x4c, 0x65, 0x88, 0xd7, 0xa7, 0x01,
+	0x5b, 0x4e, 0x9b, 0x07, 0xf5, 0x43, 0xdb, 0x31, 0x16, 0x21, 0xb0, 0x17, 0x7a, 0x97, 0x38, 0x6d,
+	0xe9, 0xbc, 0xfa, 0x37, 0x79, 0x02, 0x76, 0x10, 0x9d, 0x45, 0xee, 0x9a, 0x07, 0xd3, 0xb6, 0xc6,
+	0xdb, 0xca, 0x5e, 0xf0, 0x80, 0x7e, 0x03, 0xc3, 0x63, 0x8e, 0x9e, 0xc4, 0xa4, 0x11, 0x07, 0xff,
+	0x26, 0xcf, 0xa1, 0xb5, 0xd4, 0x86, 0xee, 0xa7, 0xfb, 0xaa, 0x3b, 0x57, 0x7d, 0x9b, 0xef, 0xe6,
+	0x13, 0xfd, 0x0b, 0x46, 0x45, 0x3f, 0x11, 0x93, 0x2f, 0x60, 0xe0, 0x05, 0x1c, 0x3d, 0xff, 0xc6,
+	0xc5, 0x6b, 0x26, 0xa4, 0xd0, 0x01, 0x6c, 0xa7, 0x6f, 0xd0, 0x77, 0x1a, 0xcc, 0xc5, 0x6f, 0xdc,
+	0x1d, 0xff, 0x19, 0x0c, 0xdf, 0x62, 0x80, 0xf9, 0xba, 0x4a, 0x1c, 0xd3, 0x23, 0x18, 0x15, 0x8f,
+	0x88, 0x98, 0x3c, 0x85, 0x4e, 0x18, 0x49, 0x77, 0x15, 0xad, 0x43, 0xdf, 0x64, 0xb7, 0xc3, 0x48,
+	0xfe, 0xa2, 0x6c, 0xfa, 0x6f, 0x1d, 0x86, 0x8b, 0xd8, 0xf7, 0xee, 0x09, 0x5a, 0x1d, 0x50, 0xe3,
+	0x21, 0x03, 0xb2, 0xb6, 0x0c, 0x28, 0x1d, 0xc4, 0xde, 0x1d, 0x83, 0x68, 0x16, 0x07, 0x71, 0x04,
+	0xa3, 0x62, 0x6d, 0xbb, 0xba, 0x61, 0x60, 0x7f, 0xf4, 0x84, 0xd8, 0x44, 0xdc, 0x27, 0x13, 0x68,
+	0xe2, 0xa5, 0xc7, 0x02, 0xd3, 0x48, 0x62, 0xa8, 0x0a, 0xce, 0x3d, 0x71, 0xae, 0x69, 0xee, 0x39,
+	0xfa, 0x37, 0x99, 0x81, 0xbd, 0x16, 0xc8, 0x75, 0x65, 0x96, 0x3e, 0x9c, 0xd9, 0xe4, 0x31, 0xb4,
+	0xd5, 0x6f, 0x97, 0xf9, 0xa6, 0xe8, 0x96, 0x32, 0x3f, 0xf8, 0xf4, 0x0d, 0x8c, 0x93, 0x61, 0xa7,
+	0x09, 0x15, 0x73, 0x2f, 0xc0, 0x8e, 0x8d, 0x69, 0x2e, 0x4a, 0x5f, 0x0f, 0x32, 0x3b, 0x93, 0x7d,
+	0xa6, 0xaf, 0x81, 0x94, 0xfd, 0x1f, 0x7c, 0x5d, 0xe8, 0x19, 0x8c, 0x13, 0x62, 0xf2, 0xc9, 0xb7,
+	0x37, 0xfc, 0x04, 0xec, 0x10, 0x37, 0x6e, 0xae, 0xe9, 0x76, 0x88, 0x9b, 0xf7, 0xaa, 0xef, 0x67,
+	0xd0, 0x53, 0x9f, 0x4a, 0xbd, 0x77, 0x43, 0xdc, 0x2c, 0x0c, 0x44, 0x5f, 0x02, 0x29, 0x27, 0xda,
+	0x35, 0x83, 0x17, 0x30, 0x4e, 0xae, 0xe0, 0xce, 0xda, 0x54, 0xf4, 0xf2, 0xd1, 0x5d, 0xd1, 0xc7,
+	0x30, 0xfc, 0x8d, 0x09, 0x99, 0x8b, 0x4d, 0x7f, 0x80, 0x51, 0x11, 0x12, 0x31, 0xf9, 0x12, 0x3a,
+	0x29, 0xd3, 0x8a, 0x42, 0xab, 0x3a, 0x89, 0xdb, 0xef, 0xb4, 0x07, 0x70, 0x82, 0x5c, 0xb0, 0x28,
+	0x54, 0xe1, 0xbe, 0x85, 0x6e, 0x66, 0x89, 0x38, 0x51, 0x2d, 0x7e, 0x85, 0xdc, 0x94, 0x6e, 0x2c,
+	0x32, 0x02, 0xa5, 0x77, 0x9a, 0xd2, 0xa6, 0xa3, 0xa5, 0xef, 0x1f, 0x18, 0x3a, 0xb8, 0xe2, 0x28,
+	0xce, 0xff, 0x8c, 0x2e, 0x30, 0x74, 0x70, 0x55, 0xd9, 0xa4, 0xa7, 0xd0, 0x49, 0x76, 0x59, 0xdd,
+	0xa7, 0x44, 0x05, 0xed, 0x04, 0xf8, 0xe0, 0x93, 0xcf, 0x01, 0x96, 0xfa, 0x46, 0xf8, 0xae, 0x27,
+	0xf5, 0x2a, 0x58, 0x4e, 0xc7, 0x20, 0x3f, 0x49, 0xe5, 0x1b, 0x78, 0x42, 0xaa, 0x71, 0xf9, 0x5a,
+	0xc9, 0x2c, 0xc7, 0x56, 0xc0, 0x42, 0xa0, 0x22, 0x7d, 0xa0, 0x38, 0x30, 0xf9, 0x15, 0xe3, 0xb9,
+	0x8b, 0x5b, 0x2f, 0x5c, 0xdc, 0x3f, 0x12, 0x06, 0xb3, 0xa3, 0x22, 0x26, 0xaf, 0x61, 0xc0, 0x13,
+	0xd3, 0x95, 0xaa, 0xf4, 0x94, 0xb2, 0x89, 0xa6, 0xac, 0xd4, 0x94, 0xd3, 0xe7, 0x39, 0x40, 0xd0,
+	0xf7, 0x30, 0x72, 0xf0, 0x2a, 0xba, 0xc0, 0x07, 0x24, 0xbf, 0x97, 0x00, 0xfa, 0x15, 0x8c, 0x4b,
+	0x91, 0x76, 0xdd, 0x86, 0x77, 0x30, 0x3e, 0x41, 0xce, 0x56, 0x37, 0xbb, 0xf7, 0x60, 0x96, 0x5b,
+	0x4d, 0x93, 0x38, 0xdb, 0xc5, 0xdf, 0x81, 0x94, 0xc3, 0x88, 0x58, 0x79, 0x5c, 0x29, 0x94, 0x61,
+	0x96, 0x38, 0xb5, 0x8b, 0x55, 0x35, 0x8a, 0x55, 0xbd, 0xfa, 0xbf, 0x09, 0xd6, 0x5b, 0xbc, 0x26,
+	0xdf, 0x43, 0x2f, 0xff, 0x1e, 0x90, 0x84, 0xce, 0xd2, 0xd3, 0x32, 0x7b, 0xb4, 0x05, 0x15, 0x31,
+	0xad, 0x29, 0xf7, 0xbc, 0xfa, 0x19, 0xf7, 0x92, 0x58, 0x1b, 0xf7, 0xb2, 0x4c, 0x26, 0xee, 0xf9,
+	0xa7, 0xc0, 0xb8, 0x97, 0x1e, 0x10, 0xe3, 0x5e, 0x7e, 0x33, 0x68, 0x8d, 0x1c, 0xc3, 0xa0, 0xa8,
+	0x4f, 0x64, 0x3f, 0x57, 0x68, 0x8e, 0xef, 0xd9, 0xe3, 0xad, 0x78, 0x1a, 0xa4, 0x28, 0x1f, 0x26,
+	0x48, 0x45, 0xbc, 0x4c, 0x90, 0xaa, 0xd6, 0x24, 0x41, 0x8a, 0x2a, 0x61, 0x82, 0x54, 0x54, 0xc6,
+	0x04, 0xa9, 0x4a, 0x0a, 0xad, 0x91, 0x37, 0xd0, 0xcf, 0x8b, 0x84, 0x30, 0x74, 0x94, 0xb4, 0xc4,
+	0xd0, 0x51, 0x96, 0x13, 0x5a, 0x23, 0x2f, 0x01, 0x7e, 0x45, 0x69, 0x84, 0x81, 0x0c, 0xf5, 0xb1,
+	0x5b, 0xd1, 0x98, 0x8d, 0x8a, 0x80, 0x76, 0xf9, 0x0e, 0xba, 0xb9, 0x45, 0x23, 0x9f, 0x65, 0xa1,
+	0x6f, 0x17, 0x65, 0x36, 0xa9, 0x82, 0xda, 0xf7, 0x47, 0xe8, 0x17, 0x56, 0x81, 0x3c, 0x32, 0xab,
+	0x58, 0x5c, 0xb4, 0xd9, 0xfe, 0x36, 0x38, 0x65, 0xad, 0x78, 0xa7, 0x0d, 0x6b, 0x95, 0x7d, 0x31,
+	0xac, 0x55, 0x17, 0x80, 0xd6, 0x7e, 0x9e, 0x00, 0x59, 0x46, 0x97, 0xf3, 0x65, 0xc4, 0x31, 0x12,
+	0x73, 0x1f, 0xaf, 0xd5, 0xd1, 0xd3, 0x96, 0xfe, 0xbf, 0xf7, 0xf5, 0xa7, 0x00, 0x00, 0x00, 0xff,
+	0xff, 0x49, 0x46, 0x0e, 0xa3, 0x00, 0x0a, 0x00, 0x00,
+}
+
 // Reference imports to suppress errors if they are not otherwise used.
 var _ context.Context
 var _ grpc.ClientConn
@@ -693,8 +1299,9 @@ var _ grpc.ClientConn
 // is compatible with the grpc package it is being compiled against.
 const _ = grpc.SupportPackageIsVersion4
 
-// Client API for Dex service
-
+// DexClient is the client API for Dex service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
 type DexClient interface {
 	// CreateClient creates a client.
 	CreateClient(ctx context.Context, in *CreateClientReq, opts ...grpc.CallOption) (*CreateClientResp, error)
@@ -732,7 +1339,7 @@ func NewDexClient(cc *grpc.ClientConn) DexClient {
 
 func (c *dexClient) CreateClient(ctx context.Context, in *CreateClientReq, opts ...grpc.CallOption) (*CreateClientResp, error) {
 	out := new(CreateClientResp)
-	err := grpc.Invoke(ctx, "/api.Dex/CreateClient", in, out, c.cc, opts...)
+	err := c.cc.Invoke(ctx, "/api.Dex/CreateClient", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -741,7 +1348,7 @@ func (c *dexClient) CreateClient(ctx context.Context, in *CreateClientReq, opts
 
 func (c *dexClient) UpdateClient(ctx context.Context, in *UpdateClientReq, opts ...grpc.CallOption) (*UpdateClientResp, error) {
 	out := new(UpdateClientResp)
-	err := grpc.Invoke(ctx, "/api.Dex/UpdateClient", in, out, c.cc, opts...)
+	err := c.cc.Invoke(ctx, "/api.Dex/UpdateClient", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -750,7 +1357,7 @@ func (c *dexClient) UpdateClient(ctx context.Context, in *UpdateClientReq, opts
 
 func (c *dexClient) DeleteClient(ctx context.Context, in *DeleteClientReq, opts ...grpc.CallOption) (*DeleteClientResp, error) {
 	out := new(DeleteClientResp)
-	err := grpc.Invoke(ctx, "/api.Dex/DeleteClient", in, out, c.cc, opts...)
+	err := c.cc.Invoke(ctx, "/api.Dex/DeleteClient", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -759,7 +1366,7 @@ func (c *dexClient) DeleteClient(ctx context.Context, in *DeleteClientReq, opts
 
 func (c *dexClient) CreatePassword(ctx context.Context, in *CreatePasswordReq, opts ...grpc.CallOption) (*CreatePasswordResp, error) {
 	out := new(CreatePasswordResp)
-	err := grpc.Invoke(ctx, "/api.Dex/CreatePassword", in, out, c.cc, opts...)
+	err := c.cc.Invoke(ctx, "/api.Dex/CreatePassword", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -768,7 +1375,7 @@ func (c *dexClient) CreatePassword(ctx context.Context, in *CreatePasswordReq, o
 
 func (c *dexClient) UpdatePassword(ctx context.Context, in *UpdatePasswordReq, opts ...grpc.CallOption) (*UpdatePasswordResp, error) {
 	out := new(UpdatePasswordResp)
-	err := grpc.Invoke(ctx, "/api.Dex/UpdatePassword", in, out, c.cc, opts...)
+	err := c.cc.Invoke(ctx, "/api.Dex/UpdatePassword", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -777,7 +1384,7 @@ func (c *dexClient) UpdatePassword(ctx context.Context, in *UpdatePasswordReq, o
 
 func (c *dexClient) DeletePassword(ctx context.Context, in *DeletePasswordReq, opts ...grpc.CallOption) (*DeletePasswordResp, error) {
 	out := new(DeletePasswordResp)
-	err := grpc.Invoke(ctx, "/api.Dex/DeletePassword", in, out, c.cc, opts...)
+	err := c.cc.Invoke(ctx, "/api.Dex/DeletePassword", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -786,7 +1393,7 @@ func (c *dexClient) DeletePassword(ctx context.Context, in *DeletePasswordReq, o
 
 func (c *dexClient) ListPasswords(ctx context.Context, in *ListPasswordReq, opts ...grpc.CallOption) (*ListPasswordResp, error) {
 	out := new(ListPasswordResp)
-	err := grpc.Invoke(ctx, "/api.Dex/ListPasswords", in, out, c.cc, opts...)
+	err := c.cc.Invoke(ctx, "/api.Dex/ListPasswords", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -795,7 +1402,7 @@ func (c *dexClient) ListPasswords(ctx context.Context, in *ListPasswordReq, opts
 
 func (c *dexClient) GetVersion(ctx context.Context, in *VersionReq, opts ...grpc.CallOption) (*VersionResp, error) {
 	out := new(VersionResp)
-	err := grpc.Invoke(ctx, "/api.Dex/GetVersion", in, out, c.cc, opts...)
+	err := c.cc.Invoke(ctx, "/api.Dex/GetVersion", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -804,7 +1411,7 @@ func (c *dexClient) GetVersion(ctx context.Context, in *VersionReq, opts ...grpc
 
 func (c *dexClient) ListRefresh(ctx context.Context, in *ListRefreshReq, opts ...grpc.CallOption) (*ListRefreshResp, error) {
 	out := new(ListRefreshResp)
-	err := grpc.Invoke(ctx, "/api.Dex/ListRefresh", in, out, c.cc, opts...)
+	err := c.cc.Invoke(ctx, "/api.Dex/ListRefresh", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -813,7 +1420,7 @@ func (c *dexClient) ListRefresh(ctx context.Context, in *ListRefreshReq, opts ..
 
 func (c *dexClient) RevokeRefresh(ctx context.Context, in *RevokeRefreshReq, opts ...grpc.CallOption) (*RevokeRefreshResp, error) {
 	out := new(RevokeRefreshResp)
-	err := grpc.Invoke(ctx, "/api.Dex/RevokeRefresh", in, out, c.cc, opts...)
+	err := c.cc.Invoke(ctx, "/api.Dex/RevokeRefresh", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -822,15 +1429,14 @@ func (c *dexClient) RevokeRefresh(ctx context.Context, in *RevokeRefreshReq, opt
 
 func (c *dexClient) VerifyPassword(ctx context.Context, in *VerifyPasswordReq, opts ...grpc.CallOption) (*VerifyPasswordResp, error) {
 	out := new(VerifyPasswordResp)
-	err := grpc.Invoke(ctx, "/api.Dex/VerifyPassword", in, out, c.cc, opts...)
+	err := c.cc.Invoke(ctx, "/api.Dex/VerifyPassword", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
 	return out, nil
 }
 
-// Server API for Dex service
-
+// DexServer is the server API for Dex service.
 type DexServer interface {
 	// CreateClient creates a client.
 	CreateClient(context.Context, *CreateClientReq) (*CreateClientResp, error)
@@ -858,6 +1464,44 @@ type DexServer interface {
 	VerifyPassword(context.Context, *VerifyPasswordReq) (*VerifyPasswordResp, error)
 }
 
+// UnimplementedDexServer can be embedded to have forward compatible implementations.
+type UnimplementedDexServer struct {
+}
+
+func (*UnimplementedDexServer) CreateClient(ctx context.Context, req *CreateClientReq) (*CreateClientResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CreateClient not implemented")
+}
+func (*UnimplementedDexServer) UpdateClient(ctx context.Context, req *UpdateClientReq) (*UpdateClientResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method UpdateClient not implemented")
+}
+func (*UnimplementedDexServer) DeleteClient(ctx context.Context, req *DeleteClientReq) (*DeleteClientResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DeleteClient not implemented")
+}
+func (*UnimplementedDexServer) CreatePassword(ctx context.Context, req *CreatePasswordReq) (*CreatePasswordResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CreatePassword not implemented")
+}
+func (*UnimplementedDexServer) UpdatePassword(ctx context.Context, req *UpdatePasswordReq) (*UpdatePasswordResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method UpdatePassword not implemented")
+}
+func (*UnimplementedDexServer) DeletePassword(ctx context.Context, req *DeletePasswordReq) (*DeletePasswordResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DeletePassword not implemented")
+}
+func (*UnimplementedDexServer) ListPasswords(ctx context.Context, req *ListPasswordReq) (*ListPasswordResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListPasswords not implemented")
+}
+func (*UnimplementedDexServer) GetVersion(ctx context.Context, req *VersionReq) (*VersionResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetVersion not implemented")
+}
+func (*UnimplementedDexServer) ListRefresh(ctx context.Context, req *ListRefreshReq) (*ListRefreshResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListRefresh not implemented")
+}
+func (*UnimplementedDexServer) RevokeRefresh(ctx context.Context, req *RevokeRefreshReq) (*RevokeRefreshResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method RevokeRefresh not implemented")
+}
+func (*UnimplementedDexServer) VerifyPassword(ctx context.Context, req *VerifyPasswordReq) (*VerifyPasswordResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method VerifyPassword not implemented")
+}
+
 func RegisterDexServer(s *grpc.Server, srv DexServer) {
 	s.RegisterService(&_Dex_serviceDesc, srv)
 }
@@ -1112,66 +1756,3 @@ var _Dex_serviceDesc = grpc.ServiceDesc{
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "api/api.proto",
 }
-
-func init() { proto.RegisterFile("api/api.proto", fileDescriptor0) }
-
-var fileDescriptor0 = []byte{
-	// 905 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0xeb, 0x6e, 0xdb, 0x36,
-	0x14, 0xb6, 0xad, 0xd8, 0x96, 0x8f, 0xef, 0x9c, 0x9b, 0xba, 0x2e, 0x06, 0xa4, 0x2c, 0x06, 0xa4,
-	0x18, 0xe0, 0xac, 0x1d, 0xb0, 0x01, 0x2b, 0xd6, 0x5d, 0xd2, 0x6e, 0x2d, 0xb0, 0x0d, 0x85, 0x30,
-	0xe7, 0xe7, 0x04, 0xc5, 0x3a, 0x4e, 0x88, 0x28, 0x92, 0x46, 0xd2, 0x71, 0xb2, 0x47, 0xd9, 0xdb,
-	0xec, 0xd7, 0x5e, 0xab, 0x20, 0x45, 0x29, 0xba, 0x38, 0x71, 0xfe, 0xf9, 0x7c, 0xe2, 0xb9, 0x7d,
-	0x87, 0xe7, 0xa3, 0xa1, 0xef, 0xc5, 0xec, 0xc8, 0x8b, 0xd9, 0x3c, 0xe6, 0x91, 0x8c, 0x88, 0xe5,
-	0xc5, 0x8c, 0xfe, 0x57, 0x87, 0xd6, 0x71, 0xc0, 0x30, 0x94, 0x64, 0x00, 0x0d, 0xe6, 0x4f, 0xeb,
-	0x07, 0xf5, 0xc3, 0x8e, 0xd3, 0x60, 0x3e, 0xd9, 0x87, 0x96, 0xc0, 0x25, 0x47, 0x39, 0x6d, 0x68,
-	0xcc, 0x58, 0xe4, 0x39, 0xf4, 0x39, 0xfa, 0x8c, 0xe3, 0x52, 0xba, 0x6b, 0xce, 0xc4, 0xd4, 0x3a,
-	0xb0, 0x0e, 0x3b, 0x4e, 0x2f, 0x05, 0x17, 0x9c, 0x09, 0x75, 0x48, 0xf2, 0xb5, 0x90, 0xe8, 0xbb,
-	0x31, 0x22, 0x17, 0xd3, 0xbd, 0xe4, 0x90, 0x01, 0x3f, 0x2a, 0x4c, 0x65, 0x88, 0xd7, 0xa7, 0x01,
-	0x5b, 0x4e, 0x9b, 0x07, 0xf5, 0x43, 0xdb, 0x31, 0x16, 0x21, 0xb0, 0x17, 0x7a, 0x97, 0x38, 0x6d,
-	0xe9, 0xbc, 0xfa, 0x37, 0x79, 0x02, 0x76, 0x10, 0x9d, 0x45, 0xee, 0x9a, 0x07, 0xd3, 0xb6, 0xc6,
-	0xdb, 0xca, 0x5e, 0xf0, 0x80, 0x7e, 0x03, 0xc3, 0x63, 0x8e, 0x9e, 0xc4, 0xa4, 0x11, 0x07, 0xff,
-	0x26, 0xcf, 0xa1, 0xb5, 0xd4, 0x86, 0xee, 0xa7, 0xfb, 0xaa, 0x3b, 0x57, 0x7d, 0x9b, 0xef, 0xe6,
-	0x13, 0xfd, 0x0b, 0x46, 0x45, 0x3f, 0x11, 0x93, 0x2f, 0x60, 0xe0, 0x05, 0x1c, 0x3d, 0xff, 0xc6,
-	0xc5, 0x6b, 0x26, 0xa4, 0xd0, 0x01, 0x6c, 0xa7, 0x6f, 0xd0, 0x77, 0x1a, 0xcc, 0xc5, 0x6f, 0xdc,
-	0x1d, 0xff, 0x19, 0x0c, 0xdf, 0x62, 0x80, 0xf9, 0xba, 0x4a, 0x1c, 0xd3, 0x23, 0x18, 0x15, 0x8f,
-	0x88, 0x98, 0x3c, 0x85, 0x4e, 0x18, 0x49, 0x77, 0x15, 0xad, 0x43, 0xdf, 0x64, 0xb7, 0xc3, 0x48,
-	0xfe, 0xa2, 0x6c, 0xfa, 0x6f, 0x1d, 0x86, 0x8b, 0xd8, 0xf7, 0xee, 0x09, 0x5a, 0x1d, 0x50, 0xe3,
-	0x21, 0x03, 0xb2, 0xb6, 0x0c, 0x28, 0x1d, 0xc4, 0xde, 0x1d, 0x83, 0x68, 0x16, 0x07, 0x71, 0x04,
-	0xa3, 0x62, 0x6d, 0xbb, 0xba, 0x61, 0x60, 0x7f, 0xf4, 0x84, 0xd8, 0x44, 0xdc, 0x27, 0x13, 0x68,
-	0xe2, 0xa5, 0xc7, 0x02, 0xd3, 0x48, 0x62, 0xa8, 0x0a, 0xce, 0x3d, 0x71, 0xae, 0x69, 0xee, 0x39,
-	0xfa, 0x37, 0x99, 0x81, 0xbd, 0x16, 0xc8, 0x75, 0x65, 0x96, 0x3e, 0x9c, 0xd9, 0xe4, 0x31, 0xb4,
-	0xd5, 0x6f, 0x97, 0xf9, 0xa6, 0xe8, 0x96, 0x32, 0x3f, 0xf8, 0xf4, 0x0d, 0x8c, 0x93, 0x61, 0xa7,
-	0x09, 0x15, 0x73, 0x2f, 0xc0, 0x8e, 0x8d, 0x69, 0x2e, 0x4a, 0x5f, 0x0f, 0x32, 0x3b, 0x93, 0x7d,
-	0xa6, 0xaf, 0x81, 0x94, 0xfd, 0x1f, 0x7c, 0x5d, 0xe8, 0x19, 0x8c, 0x13, 0x62, 0xf2, 0xc9, 0xb7,
-	0x37, 0xfc, 0x04, 0xec, 0x10, 0x37, 0x6e, 0xae, 0xe9, 0x76, 0x88, 0x9b, 0xf7, 0xaa, 0xef, 0x67,
-	0xd0, 0x53, 0x9f, 0x4a, 0xbd, 0x77, 0x43, 0xdc, 0x2c, 0x0c, 0x44, 0x5f, 0x02, 0x29, 0x27, 0xda,
-	0x35, 0x83, 0x17, 0x30, 0x4e, 0xae, 0xe0, 0xce, 0xda, 0x54, 0xf4, 0xf2, 0xd1, 0x5d, 0xd1, 0xc7,
-	0x30, 0xfc, 0x8d, 0x09, 0x99, 0x8b, 0x4d, 0x7f, 0x80, 0x51, 0x11, 0x12, 0x31, 0xf9, 0x12, 0x3a,
-	0x29, 0xd3, 0x8a, 0x42, 0xab, 0x3a, 0x89, 0xdb, 0xef, 0xb4, 0x07, 0x70, 0x82, 0x5c, 0xb0, 0x28,
-	0x54, 0xe1, 0xbe, 0x85, 0x6e, 0x66, 0x89, 0x38, 0x51, 0x2d, 0x7e, 0x85, 0xdc, 0x94, 0x6e, 0x2c,
-	0x32, 0x02, 0xa5, 0x77, 0x9a, 0xd2, 0xa6, 0xa3, 0xa5, 0xef, 0x1f, 0x18, 0x3a, 0xb8, 0xe2, 0x28,
-	0xce, 0xff, 0x8c, 0x2e, 0x30, 0x74, 0x70, 0x55, 0xd9, 0xa4, 0xa7, 0xd0, 0x49, 0x76, 0x59, 0xdd,
-	0xa7, 0x44, 0x05, 0xed, 0x04, 0xf8, 0xe0, 0x93, 0xcf, 0x01, 0x96, 0xfa, 0x46, 0xf8, 0xae, 0x27,
-	0xf5, 0x2a, 0x58, 0x4e, 0xc7, 0x20, 0x3f, 0x49, 0xe5, 0x1b, 0x78, 0x42, 0xaa, 0x71, 0xf9, 0x5a,
-	0xc9, 0x2c, 0xc7, 0x56, 0xc0, 0x42, 0xa0, 0x22, 0x7d, 0xa0, 0x38, 0x30, 0xf9, 0x15, 0xe3, 0xb9,
-	0x8b, 0x5b, 0x2f, 0x5c, 0xdc, 0x3f, 0x12, 0x06, 0xb3, 0xa3, 0x22, 0x26, 0xaf, 0x61, 0xc0, 0x13,
-	0xd3, 0x95, 0xaa, 0xf4, 0x94, 0xb2, 0x89, 0xa6, 0xac, 0xd4, 0x94, 0xd3, 0xe7, 0x39, 0x40, 0xd0,
-	0xf7, 0x30, 0x72, 0xf0, 0x2a, 0xba, 0xc0, 0x07, 0x24, 0xbf, 0x97, 0x00, 0xfa, 0x15, 0x8c, 0x4b,
-	0x91, 0x76, 0xdd, 0x86, 0x77, 0x30, 0x3e, 0x41, 0xce, 0x56, 0x37, 0xbb, 0xf7, 0x60, 0x96, 0x5b,
-	0x4d, 0x93, 0x38, 0xdb, 0xc5, 0xdf, 0x81, 0x94, 0xc3, 0x88, 0x58, 0x79, 0x5c, 0x29, 0x94, 0x61,
-	0x96, 0x38, 0xb5, 0x8b, 0x55, 0x35, 0x8a, 0x55, 0xbd, 0xfa, 0xbf, 0x09, 0xd6, 0x5b, 0xbc, 0x26,
-	0xdf, 0x43, 0x2f, 0xff, 0x1e, 0x90, 0x84, 0xce, 0xd2, 0xd3, 0x32, 0x7b, 0xb4, 0x05, 0x15, 0x31,
-	0xad, 0x29, 0xf7, 0xbc, 0xfa, 0x19, 0xf7, 0x92, 0x58, 0x1b, 0xf7, 0xb2, 0x4c, 0x26, 0xee, 0xf9,
-	0xa7, 0xc0, 0xb8, 0x97, 0x1e, 0x10, 0xe3, 0x5e, 0x7e, 0x33, 0x68, 0x8d, 0x1c, 0xc3, 0xa0, 0xa8,
-	0x4f, 0x64, 0x3f, 0x57, 0x68, 0x8e, 0xef, 0xd9, 0xe3, 0xad, 0x78, 0x1a, 0xa4, 0x28, 0x1f, 0x26,
-	0x48, 0x45, 0xbc, 0x4c, 0x90, 0xaa, 0xd6, 0x24, 0x41, 0x8a, 0x2a, 0x61, 0x82, 0x54, 0x54, 0xc6,
-	0x04, 0xa9, 0x4a, 0x0a, 0xad, 0x91, 0x37, 0xd0, 0xcf, 0x8b, 0x84, 0x30, 0x74, 0x94, 0xb4, 0xc4,
-	0xd0, 0x51, 0x96, 0x13, 0x5a, 0x23, 0x2f, 0x01, 0x7e, 0x45, 0x69, 0x84, 0x81, 0x0c, 0xf5, 0xb1,
-	0x5b, 0xd1, 0x98, 0x8d, 0x8a, 0x80, 0x76, 0xf9, 0x0e, 0xba, 0xb9, 0x45, 0x23, 0x9f, 0x65, 0xa1,
-	0x6f, 0x17, 0x65, 0x36, 0xa9, 0x82, 0xda, 0xf7, 0x47, 0xe8, 0x17, 0x56, 0x81, 0x3c, 0x32, 0xab,
-	0x58, 0x5c, 0xb4, 0xd9, 0xfe, 0x36, 0x38, 0x65, 0xad, 0x78, 0xa7, 0x0d, 0x6b, 0x95, 0x7d, 0x31,
-	0xac, 0x55, 0x17, 0x80, 0xd6, 0x7e, 0x9e, 0x00, 0x59, 0x46, 0x97, 0xf3, 0x65, 0xc4, 0x31, 0x12,
-	0x73, 0x1f, 0xaf, 0xd5, 0xd1, 0xd3, 0x96, 0xfe, 0xbf, 0xf7, 0xf5, 0xa7, 0x00, 0x00, 0x00, 0xff,
-	0xff, 0x49, 0x46, 0x0e, 0xa3, 0x00, 0x0a, 0x00, 0x00,
-}
diff --git a/server/internal/types.pb.go b/server/internal/types.pb.go
index 877cafbdba3eacd7fc6a840e42bfb2e149f657a8..18d954d560619b2d0dc5a74cac8a357e5755567c 100644
--- a/server/internal/types.pb.go
+++ b/server/internal/types.pb.go
@@ -1,23 +1,15 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // source: server/internal/types.proto
 
-/*
-Package internal is a generated protocol buffer package.
+// Package internal holds protobuf types used by the server
 
-Package internal holds protobuf types used by the server
-
-It is generated from these files:
-	server/internal/types.proto
-
-It has these top-level messages:
-	RefreshToken
-	IDTokenSubject
-*/
 package internal
 
-import proto "github.com/golang/protobuf/proto"
-import fmt "fmt"
-import math "math"
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	math "math"
+)
 
 // Reference imports to suppress errors if they are not otherwise used.
 var _ = proto.Marshal
@@ -28,18 +20,41 @@ var _ = math.Inf
 // is compatible with the proto package it is being compiled against.
 // A compilation error at this line likely means your copy of the
 // proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
 
 // RefreshToken is a message that holds refresh token data used by dex.
 type RefreshToken struct {
-	RefreshId string `protobuf:"bytes,1,opt,name=refresh_id,json=refreshId" json:"refresh_id,omitempty"`
-	Token     string `protobuf:"bytes,2,opt,name=token" json:"token,omitempty"`
+	RefreshId            string   `protobuf:"bytes,1,opt,name=refresh_id,json=refreshId,proto3" json:"refresh_id,omitempty"`
+	Token                string   `protobuf:"bytes,2,opt,name=token,proto3" json:"token,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *RefreshToken) Reset()         { *m = RefreshToken{} }
+func (m *RefreshToken) String() string { return proto.CompactTextString(m) }
+func (*RefreshToken) ProtoMessage()    {}
+func (*RefreshToken) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c3164bea0c2d595f, []int{0}
+}
+
+func (m *RefreshToken) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RefreshToken.Unmarshal(m, b)
+}
+func (m *RefreshToken) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RefreshToken.Marshal(b, m, deterministic)
+}
+func (m *RefreshToken) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RefreshToken.Merge(m, src)
+}
+func (m *RefreshToken) XXX_Size() int {
+	return xxx_messageInfo_RefreshToken.Size(m)
+}
+func (m *RefreshToken) XXX_DiscardUnknown() {
+	xxx_messageInfo_RefreshToken.DiscardUnknown(m)
 }
 
-func (m *RefreshToken) Reset()                    { *m = RefreshToken{} }
-func (m *RefreshToken) String() string            { return proto.CompactTextString(m) }
-func (*RefreshToken) ProtoMessage()               {}
-func (*RefreshToken) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+var xxx_messageInfo_RefreshToken proto.InternalMessageInfo
 
 func (m *RefreshToken) GetRefreshId() string {
 	if m != nil {
@@ -58,14 +73,37 @@ func (m *RefreshToken) GetToken() string {
 // IDTokenSubject represents both the userID and connID which is returned
 // as the "sub" claim in the ID Token.
 type IDTokenSubject struct {
-	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId" json:"user_id,omitempty"`
-	ConnId string `protobuf:"bytes,2,opt,name=conn_id,json=connId" json:"conn_id,omitempty"`
+	UserId               string   `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
+	ConnId               string   `protobuf:"bytes,2,opt,name=conn_id,json=connId,proto3" json:"conn_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *IDTokenSubject) Reset()         { *m = IDTokenSubject{} }
+func (m *IDTokenSubject) String() string { return proto.CompactTextString(m) }
+func (*IDTokenSubject) ProtoMessage()    {}
+func (*IDTokenSubject) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c3164bea0c2d595f, []int{1}
+}
+
+func (m *IDTokenSubject) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_IDTokenSubject.Unmarshal(m, b)
+}
+func (m *IDTokenSubject) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_IDTokenSubject.Marshal(b, m, deterministic)
+}
+func (m *IDTokenSubject) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_IDTokenSubject.Merge(m, src)
+}
+func (m *IDTokenSubject) XXX_Size() int {
+	return xxx_messageInfo_IDTokenSubject.Size(m)
+}
+func (m *IDTokenSubject) XXX_DiscardUnknown() {
+	xxx_messageInfo_IDTokenSubject.DiscardUnknown(m)
 }
 
-func (m *IDTokenSubject) Reset()                    { *m = IDTokenSubject{} }
-func (m *IDTokenSubject) String() string            { return proto.CompactTextString(m) }
-func (*IDTokenSubject) ProtoMessage()               {}
-func (*IDTokenSubject) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+var xxx_messageInfo_IDTokenSubject proto.InternalMessageInfo
 
 func (m *IDTokenSubject) GetUserId() string {
 	if m != nil {
@@ -86,9 +124,9 @@ func init() {
 	proto.RegisterType((*IDTokenSubject)(nil), "internal.IDTokenSubject")
 }
 
-func init() { proto.RegisterFile("server/internal/types.proto", fileDescriptor0) }
+func init() { proto.RegisterFile("server/internal/types.proto", fileDescriptor_c3164bea0c2d595f) }
 
-var fileDescriptor0 = []byte{
+var fileDescriptor_c3164bea0c2d595f = []byte{
 	// 157 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2e, 0x4e, 0x2d, 0x2a,
 	0x4b, 0x2d, 0xd2, 0xcf, 0xcc, 0x2b, 0x49, 0x2d, 0xca, 0x4b, 0xcc, 0xd1, 0x2f, 0xa9, 0x2c, 0x48,