不需要客户端ID和客户端密码的情况下授权Azure应用程序资源管理

3
我正在尝试创建一个应用程序,让用户可以管理他们的Azure资源(如SQL数据库、存储)。我该如何授权用户而不需要他们的客户端ID和客户端密钥?
我已经查看了他们的文档:https://godoc.org/github.com/Azure/go-autorest/autorest/azure/auth,然而所有这些都需要环境变量和/或客户端ID/客户端密钥。是否有一种方法,用户可以提供用户名/密码,我就能获得一个授权者呢?
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个回答

1
在所有授权流程中,您至少需要客户端 ID,有些情况下还需要更多的信息,例如客户端秘钥。
您可以在此处阅读有关OAuth授权的内容https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-app-types 但是通常您需要关注以下两种情况。
  1. 使用用户名和密码授权为用户,无需交互(这将是客户端资源所有者流程
  2. 与用户进行交互进行授权

您很快会注意到,在所有情况下,您都需要客户端 ID。这是因为 Azure 认证的工作方式。


请不要选择资源所有者密码凭据流(选项1)。您的应用程序不应处理用户的密码。 - juunas
您也可以使用多租户应用程序,但用户需要手动授予您的应用程序必要的RBAC角色,或者您可以利用已登录用户的访问权限创建RBAC分配来自动完成此过程。 - juunas
1
同意。但在一些罕见情况下,ROPC是唯一的选择,但应尽可能避免使用。否则ROPC也不会存在。很难说OP在做什么。 - Adam Marczak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接