无需客户端ID和客户端机密的Azure应用资源管理授权

时间:2019-08-27 15:26:23

标签: azure go azure-sql-database

我正在尝试创建一个应用程序,用户可以在其中管理其Azure资源(sql数据库,存储)。我该如何授权用户而不需要其客户ID和客户机密。

我看过他们的文档:https://godoc.org/github.com/Azure/go-autorest/autorest/azure/auth,但是所有它们都需要环境变量和/或clientID / clientSecret。用户可以通过什么方式提供用户名/密码,而我可以找回授权人

type Client struct {
    ServersClient postgresql.ServersClient
}

func NewCloudClient() *Client {
    return &Client{}
}

func (c *Client) Init(config map[string]string) error {
    var (
        subscriptionID = config["subscriptionID"]
        // tenantID       = config["tenantID"]
        // clientID       = config["clientID"]
        // clientSecret   = config["clientSecret"]
        // resourceGroup  = config["resourceGroup"]
    )
    // oauthConfig, err := adal.NewOAuthConfig(azure.PublicCloud.ActiveDirectoryEndpoint, tenantID)
    // if err != nil {
    //  return errors.Wrap(err, "error getting OAuthConfig")
    // }
    // spt, err := adal.NewServicePrincipalToken(*oauthConfig, clientID, clientSecret, resourceGroup)
    serversClient := postgresql.NewServersClient(subscriptionID)

    //serversClient.BaseClient.Authorizer = autorest.NewBearerAuthorizer(spt)
    c.ServersClient = serversClient
    return nil
}

1 个答案:

答案 0 :(得分:1)

所有情况下授权流程中,您至少需要客户ID 。在某些情况下,您将需要更多类似客户端机密的文件。

您可以在https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-app-types

中了解有关OAuth授权的信息

但是一般来说,您的目标是两种情况中的一种

  1. 使用用户名和密码(无需交互)授权为用户(无需交互)(这将是客户端资源所有者流
  2. 通过用户互动授权用户

您会很快注意到,在任何情况下您都需要拥有客户ID。这是因为Azure身份验证的工作原理。