Google API 액세스 토큰을 인증 / 새로 고침하고 '사용중인 파일'예외를 방지 하시겠습니까?

앤드류 트러 클

Google API 사용을 인증하는 방법은 다음과 같습니다.

Private Function DoAuthentication(ByRef rStrToken As String, ByRef rParameters As OAuth2Parameters) As Boolean
    Dim credential As UserCredential
    Dim Secrets = New ClientSecrets() With {
        .ClientId = m_strClientID,
        .ClientSecret = m_strClientSecret
    }

    m_Scopes.Add(CalendarService.Scope.Calendar)

    Try
        credential = GoogleWebAuthorizationBroker.AuthorizeAsync(Secrets, m_Scopes,
                                                                 "user", CancellationToken.None,
                                                                 New FileDataStore("XXXXX.Application")).Result()

        If credential.Token.IsExpired(Google.Apis.Util.SystemClock.Default) Then
            credential.RefreshTokenAsync(CancellationToken.None)
        End If


        ' Create the calendar service using an initializer instance
        Dim initializer As New BaseClientService.Initializer() With {
            .HttpClientInitializer = credential,
            .ApplicationName = "xxx"
        }
        m_Service = New CalendarService(initializer)

        rStrToken = credential.Token.AccessToken.ToString()
        rParameters.AccessToken = credential.Token.AccessToken
        rParameters.RefreshToken = credential.Token.RefreshToken
    Catch ex As Exception
        ' We encountered some kind of problem, perhaps they have not yet authenticated?
        ' Can we isolate that as the exception?
        m_logger.Error(ex, "DoAuthentication")

        Return False
    End Try

    Return True
End Function

그리고 내 Main:

Dim parameters As New OAuth2Parameters
If (DoAuthentication(strToken, parameters)) Then
    iResult = RESULT_SUCCESS_OAUTH
Else
    Return RESULT_FAILED_OAUTH
End If

그런 다음 계속됩니다. 문제는 때때로 "인증"이 성공하더라도 나머지 코드를 실행하기 시작한다는 것입니다. 그런 다음 예외가 발생합니다.

2020-11-30 18:47:03.6762|ERROR|GoogleAuthandSync.Program|AddEventsToCalendarXML|System.IO.IOException: The process cannot access the file 'C:\Users\USERNAME\AppData\Roaming\XXXXX.Application\Google.Apis.Auth.OAuth2.Responses.TokenResponse-user' because it is being used by another process.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)

토큰을 인증 / 갱신하고이 예외가 중지되도록 진행할 준비가되었는지 확인하려면 어떻게해야합니까? 항상 그런 것은 아닙니다.

(위의 코드 / 오류 텍스트에서 보안을 위해 토큰 파일의 이름을 변경했습니다).


Await키워드를 사용해야합니까 ?

여기에 이미지 설명 입력

If credential.Token.IsExpired(Google.Apis.Util.SystemClock.Default) Then
    Await credential.RefreshTokenAsync(CancellationToken.None)
End If

그게 차이를 만들까요? 나는이에 통지 샘플 코드 가 사용 await.

앤드류 트러 클

나는 GitHub에서 문제에 대해 물어볼 것을 권했다 ( 토론 참조 ).

내가 그랬던 것처럼 사용할 필요가 없다는 RefreshTokenAsync것이 밝혀졌습니다. 내 코드를 단순화하고 다음과 같은 Async방법 으로 바꿀 수 있습니다 .

Private Async Function DoAuthenticationAsync() As Task(Of Boolean)
    Dim credential As UserCredential
    Dim Secrets = New ClientSecrets() With {
        .ClientId = m_strClientID,
        .ClientSecret = m_strClientSecret
    }

    Try
        credential = Await GoogleWebAuthorizationBroker.AuthorizeAsync(Secrets, m_Scopes,
                                                             "user", CancellationToken.None,
                                                             New FileDataStore("XXXXX.Application"))

        ' Create the calendar service using an initializer instance
        Dim initializer As New BaseClientService.Initializer() With {
            .HttpClientInitializer = credential,
            .ApplicationName = "XXXXX"
        }

        m_Service = New CalendarService(initializer)

    Catch ex As Exception
        ' We encountered some kind of problem, perhaps they have not yet authenticated?
        ' Can we isolate that as the exception?
        m_logger.Error(ex, "DoAuthentication")

        Return False
    End Try

    Return True
End Function

그런 다음 Main함수에있는 모든 코드를 작업으로 이동해야했습니다.

Private Async Function Run() As Task(Of Integer)
    ...
End Function

마지막으로 다음 Main과 같이 조정 했습니다.

Public Function Main() As Integer
    Return RunAsync.Result
End Function

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

새로 고침 토큰은 반복적 인 오프라인 사용을 위해 Google Gmail API에 액세스하는 표준 방법인가요?

분류에서Dev

새로 고침 토큰은 반복적 인 오프라인 사용을 위해 Google Gmail API에 액세스하는 표준 방법인가요?

분류에서Dev

새로 고침 토큰을 사용하여 Google 액세스 토큰 새로 고침을 테스트하는 방법

분류에서Dev

VB.NET에서 저장된 새로 고침 토큰 및 iDataStore를 사용하여 Google API 인증

분류에서Dev

Google API에서 하나의 새로 고침 토큰을 사용하여 액세스 토큰을 무기한 생성 할 수 있습니까?

분류에서Dev

클라이언트 측 액세스 / 새로 고침 토큰을 사용하여 서버의 Google API에 액세스 할 수 있습니까?

분류에서Dev

Google Oauth 2는 인증 코드에서 액세스 토큰을 얻고 토큰을 새로 고칩니다.

분류에서Dev

NodeJS, Google API를 사용하여 새로 고침 토큰으로 새 토큰을 얻는 방법은 무엇입니까?

분류에서Dev

Google Action에서 People API를 호출하기 위해 Oauth Playground를 사용하여 새로 고침 및 액세스 토큰을 사용하는 방법은 무엇입니까?

분류에서Dev

Google Action에서 People API를 호출하기 위해 Oauth Playground를 사용하여 새로 고침 및 액세스 토큰을 사용하는 방법은 무엇입니까?

분류에서Dev

새로 고침 토큰을 사용하는 Google Calendar API

분류에서Dev

Google API JS Client를 사용하는 동안 새로 고침 토큰을 얻는 방법

분류에서Dev

Qt 및 액세스 토큰을 사용하여 GitHub로 인증하는 방법

분류에서Dev

서비스 계정을 통해 Google 라이브러리를 사용하여 드라이브 API에 액세스 할 때 명시 적으로 토큰을 새로 고침해야합니까?

분류에서Dev

새로 고침 토큰을 액세스 토큰으로 교환하는 방법.

분류에서Dev

장치 액세스를 승인하는 동안 새로 고침 토큰이 없습니다.

분류에서Dev

Google 인증 액세스 토큰을 지속적으로 갱신해야하는 이유는 무엇입니까?

분류에서Dev

vb.net을 사용하여 새로 고침 토큰에서 새 액세스 토큰을 새로 만드는 방법은 무엇입니까?

분류에서Dev

Passport를 사용하여 Yahoo OAuth 1.0 액세스 토큰 새로 고침

분류에서Dev

플라스크에서 새로 고침 토큰을 사용하여 새 액세스 토큰을 생성하는 방법은 무엇입니까?

분류에서Dev

API 게이트웨이가 인트로 스펙 션을 통해 액세스 토큰을 검증하는 방법

분류에서Dev

PHP SDK를 통해 Facebook API 액세스 토큰 및 사용자 ID를 확인 하시겠습니까?

분류에서Dev

데이터베이스에 새로 고침 토큰을 저장하는 것이 안전합니까? (로그인 목적으로 새 액세스 토큰을 발행하기 위해). 아니면 더 쉽게 할 수있는 방법이 있습니까?

분류에서Dev

새 알파 API를 사용할 수있을 때까지 기다리지 않고 Google Analytics API v4로 업그레이드 하시겠습니까?

분류에서Dev

인덱스 페이지를 제외하고 새로 고침 후 올바른 정적 파일을 가져올 수 없습니다.

분류에서Dev

API 만 레일 애플리케이션을 지원하고 토큰을 새로 고치는 Devise와 유사한 인증 라이브러리입니까?

분류에서Dev

React로 사용자에게 노출하지 않고 외부 API 액세스 토큰을 사용하는 방법은 무엇입니까?

분류에서Dev

인증 토큰을 사용하여 지정된 패키지 버전에 대한 비공개 NPM 레지스트리를 쿼리하지만 파일 시스템 액세스 권한은 없습니까?

분류에서Dev

무단 액세스 예외로 인해 C #을 사용하여 파일에 이미지를 쓸 수 없습니다.

Related 관련 기사

  1. 1

    새로 고침 토큰은 반복적 인 오프라인 사용을 위해 Google Gmail API에 액세스하는 표준 방법인가요?

  2. 2

    새로 고침 토큰은 반복적 인 오프라인 사용을 위해 Google Gmail API에 액세스하는 표준 방법인가요?

  3. 3

    새로 고침 토큰을 사용하여 Google 액세스 토큰 새로 고침을 테스트하는 방법

  4. 4

    VB.NET에서 저장된 새로 고침 토큰 및 iDataStore를 사용하여 Google API 인증

  5. 5

    Google API에서 하나의 새로 고침 토큰을 사용하여 액세스 토큰을 무기한 생성 할 수 있습니까?

  6. 6

    클라이언트 측 액세스 / 새로 고침 토큰을 사용하여 서버의 Google API에 액세스 할 수 있습니까?

  7. 7

    Google Oauth 2는 인증 코드에서 액세스 토큰을 얻고 토큰을 새로 고칩니다.

  8. 8

    NodeJS, Google API를 사용하여 새로 고침 토큰으로 새 토큰을 얻는 방법은 무엇입니까?

  9. 9

    Google Action에서 People API를 호출하기 위해 Oauth Playground를 사용하여 새로 고침 및 액세스 토큰을 사용하는 방법은 무엇입니까?

  10. 10

    Google Action에서 People API를 호출하기 위해 Oauth Playground를 사용하여 새로 고침 및 액세스 토큰을 사용하는 방법은 무엇입니까?

  11. 11

    새로 고침 토큰을 사용하는 Google Calendar API

  12. 12

    Google API JS Client를 사용하는 동안 새로 고침 토큰을 얻는 방법

  13. 13

    Qt 및 액세스 토큰을 사용하여 GitHub로 인증하는 방법

  14. 14

    서비스 계정을 통해 Google 라이브러리를 사용하여 드라이브 API에 액세스 할 때 명시 적으로 토큰을 새로 고침해야합니까?

  15. 15

    새로 고침 토큰을 액세스 토큰으로 교환하는 방법.

  16. 16

    장치 액세스를 승인하는 동안 새로 고침 토큰이 없습니다.

  17. 17

    Google 인증 액세스 토큰을 지속적으로 갱신해야하는 이유는 무엇입니까?

  18. 18

    vb.net을 사용하여 새로 고침 토큰에서 새 액세스 토큰을 새로 만드는 방법은 무엇입니까?

  19. 19

    Passport를 사용하여 Yahoo OAuth 1.0 액세스 토큰 새로 고침

  20. 20

    플라스크에서 새로 고침 토큰을 사용하여 새 액세스 토큰을 생성하는 방법은 무엇입니까?

  21. 21

    API 게이트웨이가 인트로 스펙 션을 통해 액세스 토큰을 검증하는 방법

  22. 22

    PHP SDK를 통해 Facebook API 액세스 토큰 및 사용자 ID를 확인 하시겠습니까?

  23. 23

    데이터베이스에 새로 고침 토큰을 저장하는 것이 안전합니까? (로그인 목적으로 새 액세스 토큰을 발행하기 위해). 아니면 더 쉽게 할 수있는 방법이 있습니까?

  24. 24

    새 알파 API를 사용할 수있을 때까지 기다리지 않고 Google Analytics API v4로 업그레이드 하시겠습니까?

  25. 25

    인덱스 페이지를 제외하고 새로 고침 후 올바른 정적 파일을 가져올 수 없습니다.

  26. 26

    API 만 레일 애플리케이션을 지원하고 토큰을 새로 고치는 Devise와 유사한 인증 라이브러리입니까?

  27. 27

    React로 사용자에게 노출하지 않고 외부 API 액세스 토큰을 사용하는 방법은 무엇입니까?

  28. 28

    인증 토큰을 사용하여 지정된 패키지 버전에 대한 비공개 NPM 레지스트리를 쿼리하지만 파일 시스템 액세스 권한은 없습니까?

  29. 29

    무단 액세스 예외로 인해 C #을 사용하여 파일에 이미지를 쓸 수 없습니다.

뜨겁다태그

보관