我正在尝试通过Google api身份验证进行首次使用Google Firestore。我要做的第一件事是用几个StartBatch
方法的Set
填充数据库,当我await
批次Task
时,它给了我这个错误:>
Error: Status(StatusCode=PermissionDenied, Detail="Request had insufficient authentication scopes.") ;
关于使用Google进行身份验证以连接到Firestore的知识很少。首先,我使用Google控制台为我的应用程序提供的机密通过此方法进行身份验证:
public async Task<GoogleOAuthState> GetUserCredentialAsync(string user = null, GoogleOAuthState oAuthState = null)
{
using (ClientSecretStream)
{
string credPath = System.Environment.GetFolderPath(
System.Environment.SpecialFolder.Personal);
if (oAuthState == null)
{
try
{
var credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(ClientSecretStream).Secrets,
_Scopes,
string.IsNullOrEmpty(user) ? "user" : user,
CTS.Token,
new FileDataStore(credPath, true));
return new GoogleOAuthState(credential, _AppName);
}
catch (Exception e)
{
SetErrorMessage(e, "Error al intentar identificarse en google");
return null;
}
}
else
{
try
{
await GoogleWebAuthorizationBroker.ReauthorizeAsync(
oAuthState.Credential,
CTS.Token);
return oAuthState;
}
catch (Exception e)
{
SetErrorMessage(e, "Error al intentar volver a identificarse en google");
return null;
}
}
}
}
使用在我的Google控制台中为该应用配置的相同范围(我在同一应用中使用Google驱动器)
SheetsService.Scope.Spreadsheets
DriveService.Scope.DriveFile
DriveService.Scope.Drive
DriveService.Scope.DriveAppdata
DriveService.Scope.DriveMetadata
"https://www.googleapis.com/auth/datastore"
"https://www.googleapis.com/auth/cloud-platform"
GoogleOAuthState
只是要保存并传递Credential
的对象,而没有。
之后,我以此连接到Firestore:
public async Task ConnectDB(GoogleLogin.GoogleOAuthState oAuthState)
{
var channelCredentials = oAuthState.Credential.ToChannelCredentials();
var channel = new Channel(FirestoreClient.DefaultEndpoint.ToString(), channelCredentials);
var client = FirestoreClient.Create(channel);
_DB = FirestoreDb.Create(Properties.Settings.Default.FirebaseProjectName, client);
}
我在this question中看到了该方法,并认为它是最可靠的。
与此同时,我已经设置了类似的Firestore规则:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
Google身份验证正常,我可以正常使用Google驱动器。我还在Firestore控制台中添加了google作为身份验证方法,并添加了应用程序ID(我不确定这是否确实必要)。
我认为我误会了某件事...甚至有可能这样做吗?还是我必须使用服务帐户?
答案 0 :(得分:-1)
根据我的测试和阅读,似乎无法通过桌面应用程序通过oAuth登录到Firestore:您使用服务帐户还是什么都没有。我什至不确定是否可以通过桌面应用程序进行签名,它既可以是移动应用程序,也可以是Web应用程序。
无论如何,即使有服务帐户,现在我还有另一个问题,所以我要提出另一个问题。