使用保存在数据库中的令牌验证Google云端硬盘

时间:2015-04-14 09:02:50

标签: c# asp.net-mvc google-drive-api google-api-dotnet-client

我正在尝试创建自己的IDataStore实现,以便与Google身份验证配合使用。

我创建了DatabaseDataStore(类似于sample中的一个),它实现了IDataStore。在我的Web应用程序中,我有一个注册用户页面,我要求用户单击注册按钮,他将被重定向到Google身份验证。这是代码。

var result = await new AuthorizationCodeMvcApp(this, new AppFlowMetadata()). AuthorizeAsync(cancellationToken);

这是AppFlowMetadata:

private static readonly IAuthorizationCodeFlow flow =
new CustomAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
    {
    ClientSecrets = new ClientSecrets  { ClientId = “my client id”, ClientSecret = “my client secrets” },
    Scopes = new[] { DriveService.Scope.Drive },
    DataStore = new DatabaseDataStore(“LocalDB”,””,””,””,””)
});

我将空值传递给idatastore,因为我已经硬编码了连接字符串。成功完成Oauth Flow后,我可以在GoogleUser Table中看到数据保存在我的数据库中。 google usertable会在refreshtoken字段中自动保存此信息以及用户ID。

  

{“的access_token”:” XXXXXX”,” token_type”:”承载”,” expires_in”:3600,” refresh_token”:” XXXXXX”,”分”:” 2015-04-08T18:17:01.233 + 05 :30“}

现在下一步是我想让用户转到应用程序中的另一个页面,在那里他将选择要上传的文件。然后他应该能够上传已经过身份验证的文件。我在这里做了类似的事。

private static readonly IAuthorizationCodeFlow flow =
      new CustomAuthorizationCodeFlowSaved(new GoogleAuthorizationCodeFlow.Initializer {  ClientSecrets = new ClientSecrets { ClientId = “My client id”,ClientSecret = “my client Secret” },
      Scopes = new[] { DriveService.Scope.Drive },
      DataStore = new DatabaseDataStore(getStream())    
} );
private static StoredResponse getStream()
    {
    DataAccess objDA = new DataAccess();
    DataRow dr = objDA.getSingleDataRow(“Select RefreshToken from dbo.GoogleUser where userid=1 and username=’user Name'”);
    StoredResponse myStoredResponse = new StoredResponse(dr[“RefreshToken”].ToString());
    return myStoredResponse;
    }

我已经为StoredResponse创建了类,如下所示。 (我刚刚将文章转介给savedDatastore。)

public class StoredResponse
{
public string access_token { get; set; }
public string token_type { get; set; }
public long? expires_in { get; set; }
public string refresh_token { get; set; }
public string Issued { get; set; }

public StoredResponse(string pRefreshToken)
{
//this.access_token = pAccessToken;
// this.token_type = pTokenType;
//this.expires_in = pExpiresIn;
this.refresh_token = pRefreshToken;
//this.Issued = pIssued;
this.Issued = DateTime.MinValue.ToString();
}
public StoredResponse()
{
this.Issued = DateTime.MinValue.ToString();
}

}

这不会提示登录,但凭据为空。

你能帮我解决这个问题吗?最终我想将令牌存储到数据库中,并在一段时间后在另一个页面上使用它们。但不是一次会议。

0 个答案:

没有答案