.net FusiontablesService身份验证问题

时间:2013-06-14 13:43:12

标签: c# google-fusion-tables google-api-dotnet-client

我正在尝试在我的WPF应用程序中实现google fustion table api,以便在我的谷歌地图中显示大量的标记,但问题是当我要验证函数“GetAuthorization”从不调用时。

    public Fusion()
    {
        // Create the service.
        objService = new FusiontablesService(new BaseClientService.Initializer()
        {
            Authenticator = CreateAuthenticator()
        });

        //GetAuthorization(provider);
    }

    /// <summary>
    /// The remote service on which all the requests are executed.
    /// </summary>
    public FusiontablesService objService { get; private set; }
    NativeApplicationClient provider = null;

    private IAuthenticator CreateAuthenticator()
    {
        provider = new NativeApplicationClient(GoogleAuthenticationServer.Description)
        {
            ClientIdentifier = ClientCredentials.ClientID,
            ClientSecret = ClientCredentials.ClientSecret
        };
        return new OAuth2Authenticator<NativeApplicationClient>(provider, GetAuthorization);
    }

    private IAuthorizationState GetAuthorization(NativeApplicationClient client)
    {
        // You should use a more secure way of storing the key here as
        // .NET applications can be disassembled using a reflection tool.
        const string STORAGE = "google.samples.dotnet.fusion";
        const string KEY = "AIzaSyCtaH=6+";
        string scope = FusiontablesService.Scopes.Fusiontables.GetStringValue();

        // Check if there is a cached refresh token available.
        IAuthorizationState state = AuthorizationMgr.GetCachedRefreshToken(STORAGE, KEY);
        if (state != null)
        {
            try
            {
                client.RefreshToken(state);
                return state; // Yes  - we are done.
            }
            catch (DotNetOpenAuth.Messaging.ProtocolException ex)
            {
                CommandLine.WriteError("Using existing refresh token failed: " + ex.Message);
            }
        }

        // Retrieve the authorization from the user.
        state = AuthorizationMgr.RequestNativeAuthorization(client, scope);
        AuthorizationMgr.SetCachedRefreshToken(STORAGE, KEY, state);
        return state;
    }

请帮我解决这个问题。

P.S当我使用TaskService和BookService时,此代码工作正常。

1 个答案:

答案 0 :(得分:1)

编辑:忘记该方法未在IAuthenticator界面中公开

private IAuthenticator CreateAuthenticator()
{
    provider = new NativeApplicationClient(GoogleAuthenticationServer.Description)
    {
        ClientIdentifier = ClientCredentials.ClientID,
        ClientSecret = ClientCredentials.ClientSecret
    };
    var auth = new OAuth2Authenticator<NativeApplicationClient>(provider, GetAuthorization);
    auth.LoadAccessToken()
    return auth;
}