为什么我不能在 KeyCloak 中使用来自 gocloak 中 Login()

我正在编写一个在 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_error

Client d869fd8d-e5f0-4567-99de-69ccc4403705 created


梦里花落0921
浏览 74回答 1
1回答

慕娘9325324

要使用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 clientfunc (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"
打开App,查看更多内容
随时随地看视频慕课网APP