x-oidc/granttype_token_exchange.go
2023-06-02 10:32:29 +08:00

52 lines
1.2 KiB
Go

package oidc
import (
"context"
"github.com/xslasd/x-oidc/constant"
"github.com/xslasd/x-oidc/ecode"
"github.com/xslasd/x-oidc/model"
)
// TODO
func (o *OpenIDProvider) subjectTokenExchange(ctx context.Context, req *TokenExchangeReq) (*model.AccessTokenRes, error) {
if req.SubjectToken == "" {
return nil, ecode.SubjectTokenInvalid
}
if req.SubjectTokenType == "" {
return nil, ecode.SubjectTokenTypeInvalid
}
client, err := o.cfg.Storage.GetClientByClientID(ctx, req.ClientID)
if err != nil {
return nil, err
}
if client.GetClientSecret() != req.ClientSecret {
return nil, ecode.ClientIDOrSecretInvalid
}
switch req.SubjectTokenType {
case constant.AccessTokenType:
//var tokenID, subject string
//parts := strings.Split(req.SubjectToken, ".")
//if len(parts) == 3 {
//
//} else {
// tokenIDSubject, err := o.Crypto.Decrypt(req.SubjectToken)
// if err != nil {
// return nil, err
// }
// splitToken := strings.Split(tokenIDSubject, ":")
// if len(splitToken) != 2 {
// return nil, ecode.SubjectTokenInvalid
// }
// tokenID = splitToken[0]
// subject = splitToken[1]
//}
case constant.RefreshTokenType:
case constant.IDTokenType:
case constant.JWTTokenType:
}
return nil, nil
}