>  기사  >  백엔드 개발  >  msgraph-sdk-go 교육 샘플 코드를 실행할 때 "액세스 토큰 가져오기가 비어 있습니다" 오류

msgraph-sdk-go 교육 샘플 코드를 실행할 때 "액세스 토큰 가져오기가 비어 있습니다" 오류

WBOY
WBOY앞으로
2024-02-09 08:12:30611검색

运行 msgraph-sdk-go 训练示例代码时出现“获取访问令牌为空”错误

PHP 편집자 Xiaoxin은 오늘 msgraph-sdk-go 교육 샘플 코드에 대한 질문을 가져왔습니다. 실행 중에 "액세스 토큰 가져오기가 비어 있습니다." 오류가 발생할 수 있습니다. 이 오류로 인해 코드가 올바르게 실행되지 않고 훈련 결과에 영향을 미칠 수 있습니다. 이 글에서는 샘플 코드를 원활하게 실행하고 더 나은 학습 경험을 누릴 수 있도록 이 문제의 원인과 해결 방법을 자세히 소개하겠습니다.

질문 내용

https://github.com/microsoftgraph/msgraph-training-go에서 msgraph-sdk-go 교육 코드를 실행하려고 하면 invalidauthenticationtokenmsg:执行图形 api 调用时访问令牌为空 이라는 메시지가 나타납니다. 평가판 사용을 위해 인스턴트 샌드박스로 Microsoft 개발자 계정을 구성했습니다. 여기 튜토리얼에 설명된 대로 애플리케이션 등록을 생성하고 애플리케이션에 필요한 권한을 부여했습니다. 코드는 앱 토큰을 가져올 수 있지만 위의 오류로 인해 사용자를 가져오는 호출이 실패합니다. 여기서 뭔가 빠졌나요?

msgraph-training 예제에서 다음 코드를 시도했습니다

으아악

튜토리얼에 설명된 대로 앱에 user.read.all 권한을 추가했습니다. 사용자 목록을 가져오는 대신 다음 오류가 발생합니다.

func (g *graphhelper) initializegraphforappauth() error {
    clientid := os.getenv("client_id")
    tenantid := os.getenv("tenant_id")
    clientsecret := os.getenv("client_secret")
    credential, err := azidentity.newclientsecretcredential(tenantid, clientid, clientsecret, nil)
    if err != nil {
        return err
    }

    g.clientsecretcredential = credential

    
    // create an auth provider using the credential
    authprovider, err := auth.newazureidentityauthenticationproviderwithscopes(g.clientsecretcredential, []string{
        "https://graph.microsoft.com/.default",
    })
    if err != nil {
        return err
    }

    // create a request adapter using the auth provider
    adapter, err := msgraphsdk.newgraphrequestadapter(authprovider)
    if err != nil {
        return err
    }

    // create a graph client using request adapter
    client := msgraphsdk.newgraphserviceclient(adapter)
    g.appclient = client

    return nil
}
// this part works, and i get the apptoken with required scope, once decoded.
func (g *graphhelper) getapptoken() (*string, error) {
    token, err := g.clientsecretcredential.gettoken(context.background(), policy.tokenrequestoptions{
        scopes: []string{
            "https://graph.microsoft.com/.default",
        },
    })
    if err != nil {
        return nil, err
    }
    fmt.println("expires on : ", token.expireson)
    return &token.token, nil
}

// the getusers function errors out
func (g *graphhelper) getusers() (models.usercollectionresponseable, error) {
    var topvalue int32 = 25
    query := users.usersrequestbuildergetqueryparameters{
        // only request specific properties
        select: []string{"displayname", "id", "mail"},
        // get at most 25 results
        top: &topvalue,
        // sort by display name
        orderby: []string{"displayname"},
    }

    resp, err := g.appclient.users().
        get(context.background(),
            &users.usersrequestbuildergetrequestconfiguration{
                queryparameters: &query,
            })
    if err != nil {
        fmt.println("users.get got error", err.error(), resp)
        printodataerror(err)
    }
    resp, err = g.appclient.users().
        get(context.background(),
            nil)
    if err != nil {
        fmt.println("users.get got error with nil", err.error(), resp)
    }
    return resp, err
}

해결 방법

몇 번의 시행착오 끝에 제게 효과가 있었던 수정 사항은 예제의 버전이 제가 시도한 실제 애플리케이션과 일치하지 않는다는 것이었습니다. 내가 사용하고 있는 베타 msgraph 애플리케이션은 v0.49이고, msgraphsdk 튜토리얼은 v0.48을 사용합니다. go mod 명령은 처음에 v0.48을 사용하기 위해 msgraph-training go.mod 파일을 살펴본 후 최신 v0.49를 선택한 것 같습니다. com/microsoftgraph/msgraph-training-go" rel="nofollow noreferrer">리포지토리 모든 것이 작동하기 시작합니다. 이것이 앞으로 다른 사람들에게 도움이 되기를 바랍니다.

위 내용은 msgraph-sdk-go 교육 샘플 코드를 실행할 때 "액세스 토큰 가져오기가 비어 있습니다" 오류의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제