package service import ( "encoding/base64" "encoding/json" "errors" "fmt" "io/ioutil" "net/http" "net/url" ) type DemoConfig struct { ClientSecret string ClientId string TokenUrl string RootUrlOrder string AccessToken string } func GetDefaultConfig() *DemoConfig { var demoConfig DemoConfig // TODO: (clientId, clientSecret, tokenUrl)请使用实际值替换 // App secret, 在AppGallery Connect创建应用之后,系统自动分配的公钥 demoConfig.ClientSecret = "524921589d516c7216951aa389c030681923cd22dfc4477871f9306430eefb6d" // client id指的是您的APP ID // App ID, 在AppGallery Connect创建应用之后,系统自动分配的唯一标识符 demoConfig.ClientId = "112487401" // 用于获取authorization token的url,具体请参见基于OAuth 2.0开放鉴权 demoConfig.TokenUrl = "https://oauth-login.cloud.huawei.com/oauth2/v3/token" return &demoConfig } type AtResponse struct { AccessToken string `json:"access_token"` } type AtClient struct { } var AtDemo = &AtClient{} func (atDemo *AtClient) GetAppAt() (string, error) { demoConfig := GetDefaultConfig() urlValue := url.Values{"grant_type": {"client_credentials"}, "client_secret": {demoConfig.ClientSecret}, "client_id": {demoConfig.ClientId}} resp, err := http.PostForm(demoConfig.TokenUrl, urlValue) if err != nil { return "", err } defer resp.Body.Close() bodyBytes, err := ioutil.ReadAll(resp.Body) if err != nil { return "", err } var atResponse AtResponse json.Unmarshal(bodyBytes, &atResponse) if atResponse.AccessToken != "" { return atResponse.AccessToken, nil } else { return "", errors.New("Get token fail, " + string(bodyBytes)) } } func BuildAuthorization() (string, error) { appAt, err := AtDemo.GetAppAt() if err != nil { return "", err } oriString := fmt.Sprintf("APPAT:%s", appAt) var authString = base64.StdEncoding.EncodeToString([]byte(oriString)) var authHeaderString = fmt.Sprintf("Basic %s", authString) return authHeaderString, nil }