登录
首页 >  Golang >  Go问答

Go语言中如何使用Azure AD获取OAuth2.0访问令牌?

来源:stackoverflow

时间:2024-03-11 09:09:27 235浏览 收藏

学习Golang要努力,但是不要急!今天的这篇文章《Go语言中如何使用Azure AD获取OAuth2.0访问令牌?》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!

问题内容

我正在尝试使用 Go 使用 Azure 服务总线实体。通过提供 SAS 令牌或 Azure AD OAuth2.0 令牌(将通过 Azure AD 应用程序的安全主体获取),可以使用 Azure 服务总线进行身份验证。从技术上讲,我更喜欢安全主体选项而不是 SAS 令牌,因为它存在安全漏洞。

如何使用无法使用 Azure AD SDK 的 Go 从 Azure AD 获取 OAuth2.0 令牌?

是否可以直接调用 Azure AD REST API 来访问 OAuth2.0 令牌?


正确答案


有一些方法可以使用 go 获取访问令牌。

1。使用http请求

例如 authorization code flow,整个代码示例 here

func gettokens(c authorizationconfig, authcode authorizationcode, scope string) (t tokens, err error) {
    formvals := url.values{}
    formvals.set("code", authcode.value)
    formvals.set("grant_type", "authorization_code")
    formvals.set("redirect_uri", c.redirecturl())
    formvals.set("scope", scope)
    if c.clientsecret != "" {
        formvals.set("client_secret", c.clientsecret)
    }
    formvals.set("client_id", c.clientid)
    response, err := http.postform(tokenurl, formvals)

    if err != nil {
        return t, errors.wrap(err, "error while trying to get tokens")
    }
    body, err := ioutil.readall(response.body)

    if err != nil {
        return t, errors.wrap(err, "error while trying to read token json body")
    }

    err = json.unmarshal(body, &t)
    if err != nil {
        return t, errors.wrap(err, "error while trying to parse token json body")
    }

    return
}

2。使用MSAL Go

// 1.1 Initializing a public client:
publicClientApp, err := public.New("client_id", public.WithAuthority("https://login.microsoftonline.com/Enter_The_Tenant_Name_Here"))

// 1.2 Initializing a confidential client:
confidentialClientApp, err := confidential.New("client_id", cred, confidential.WithAuthority("https://login.microsoftonline.com/Enter_The_Tenant_Name_Here"))

// 2. MSAL comes packaged with an in-memory cache. Utilizing the cache is optional, but we would highly recommend it.
var userAccount public.Account
accounts := publicClientApp.Accounts()
if len(accounts) > 0 {
    // Assuming the user wanted the first account
    userAccount = accounts[0]
    // found a cached account, now see if an applicable token has been cached
    result, err := publicClientApp.AcquireTokenSilent(context.Background(), []string{"your_scope"}, public.WithSilentAccount(userAccount))
    accessToken := result.AccessToken
}

// 3. If there is no suitable token in the cache, or you choose to skip this step, now we can send a request to AAD to obtain a token.
result, err := publicClientApp.AcquireToken"ByOneofTheActualMethods"([]string{"your_scope"}, ...(other parameters depending on the function))
if err != nil {
    log.Fatal(err)
}
accessToken := result.AccessToken

最后,Azure SDK for Go似乎用于通过azure进行身份验证,但它没有提供获取访问令牌的sdk方法。

今天关于《Go语言中如何使用Azure AD获取OAuth2.0访问令牌?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>