亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我不能在 KeyCloak 中使用來自 gocloak 中 Login()

為什么我不能在 KeyCloak 中使用來自 gocloak 中 Login()

Go
夢里花落0921 2022-12-26 10:25:30
我正在編寫一個在 keycloak 服務器中創建新客戶端的 API。我使用 gocloak 包與 keycloak 服務器交互。起初我將來自 gocloak.Login() 函數的訪問令牌傳遞給 gocloak.CreateClient() 并收到 403 錯誤之后我使用來自 gocloak.LoginAdmin() 的訪問令牌并且它有效,它確實創建了一個新的客戶。那么是什么導致從 gocloak.Login() 返回的訪問令牌失敗呢?代碼:func main() {    newClientID := "new_client"    client := gocloak.NewClient("http://localhost:8080")    // The access token returned from Login() causes 403 error    jwt, _ := client.Login(context.Background(), "my-go-service", "vizhhp0qnDGaiq4k0aOzzn4RaaqSwU2b", "master", "admin", "Pa55w0rd")    _, err := client.CreateClient(context.Background(), jwt.AccessToken, "demorealm", gocloak.Client{ ClientID: &newClientID})    if err != nil {        fmt.Println(err.Error())    }    // And the access token returned from LoginAdmin() works    jwt, _ = client.LoginAdmin(context.Background(), "admin", "Pa55w0rd", "master")    clientID, err := client.CreateClient(context.Background(), jwt.AccessToken, "demorealm", gocloak.Client{ ClientID: &newClientID})    if err != nil {        fmt.Println(err.Error())    } else {        fmt.Printf("Client %s created", clientID)    }}結果:403 Forbidden: unknown_errorClient d869fd8d-e5f0-4567-99de-69ccc4403705 created
查看完整描述

1 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

要使用Keycloak Admin API,它允許創建客戶端,你需要使用admin-cli客戶端。

這就是為什么:

jwt, _ = client.LoginAdmin(context.Background(), "admin", "Pa55w0rd", "master")

之所以有效,是因為 LoginAdmin 調用了 admin-cli,而:

jwt, _ := client.Login(context.Background(), "my-go-service", "vizhhp0qnDGaiq4k0aOzzn4RaaqSwU2b", "master", "admin", "Pa55w0rd")

正在從客戶端“my-go-service”請求令牌,不允許執行對 Admin Rest API 的調用。因此:

403 Forbidden: unknown_error

如果您查看LoginAdmin實現,您可以確認我所說的:

// LoginAdmin performs a login with Admin client

func (client *gocloak) LoginAdmin(ctx context.Context, username, password, realm string) (*JWT, error) {

    return client.GetToken(ctx, realm, TokenOptions{

        ClientID:  StringP(adminClientID),

        GrantType: StringP("password"),

        Username:  &username,

        Password:  &password,

    })

}

在哪里


adminClientID string = "admin-cli"


查看完整回答
反對 回復 2022-12-26
  • 1 回答
  • 0 關注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號