首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用-tokens仿真程序创建和验证(JWT)-tokens

用-tokens仿真程序创建和验证(JWT)-tokens
EN

Stack Overflow用户
提问于 2022-09-01 16:46:20
回答 1查看 113关注 0票数 1

我的目标是通过firebase发出令牌,用于使用模拟器进行本地开发的身份验证。

在模拟器中使用针对本地项目(演示-项目)的FireBase管理。下面的代码用于查找用户以及发出和验证令牌。但这一结果是象征性受众(aud)的不匹配。如何解决这一问题?

Firebase ID令牌有错误的受众(aud)声明。预期演示-项目,但得到了https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit。确保ID令牌来自与用于初始化此SDK的凭据相同的Firebase项目

代码语言:javascript
复制
    Environment.SetEnvironmentVariable("FIREBASE_AUTH_EMULATOR_HOST", "localhost:9099");
    Environment.SetEnvironmentVariable("GCLOUD_PROJECT", "demo-project");
    
    var email = [EMAIL];
    
    GoogleCredential dummyCredential =
               GoogleCredential.FromAccessToken("test-token");
    
    var app = FirebaseApp.Create(new AppOptions
    {
        Credential = dummyCredential
    });
    var auth = FirebaseAuth.GetAuth(app);
    var user = await auth.GetUserByEmailAsync(email);
    var token = await auth.CreateCustomTokenAsync(user.Uid);
    var verifiedToken = await auth.VerifyIdTokenAsync(token);

观众似乎取决于Admin是如何启动的,这就是不匹配的原因。如何启动SDK来开发模拟器?希望能够做到这一点,而不与任何消防基地托管项目。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-05 16:31:36

为登录编写了两个util函数,带有令牌或电子邮件/密码。

代码语言:javascript
复制
Environment.SetEnvironmentVariable("FIREBASE_AUTH_EMULATOR_HOST", "localhost:9099");
Environment.SetEnvironmentVariable("GCLOUD_PROJECT", "demo-project");

var email = [EMAIL];

GoogleCredential dummyCredential =
            GoogleCredential.FromAccessToken("test-token");

var app = FirebaseApp.Create(new AppOptions
{
    Credential = dummyCredential,
    ProjectId = "demo-project"
});

var auth = FirebaseAuth.DefaultInstance;
var user = await auth.GetUserByEmailAsync(email);
var token = await auth.CreateCustomTokenAsync(user.Uid);
var verifiedToken = await auth.VerifyIdTokenAsync(await SignIn.FireBaseSignIn(token));

而不是使用创建自定义令牌,而是通过登录util在现有用户中签名;

代码语言:javascript
复制
var user = await auth.GetUserByEmailAsync(email);
var verifiedToken = await auth.VerifyIdTokenAsync(await SignIn.FireBaseSignIn(email, [PASSWORD]));

登录实用程序;

代码语言:javascript
复制
public record SignInResponse(string IdToken);

public static async Task<string> FireBaseSignIn(string email, string password)
{
    var authClient = new HttpClient
    {
        BaseAddress = new Uri("http://localhost:9099/")
    };

    var res = await authClient.PostAsJsonAsync("identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=fake-api-key",
        new { email, password, returnSecureToken = true });
    res.EnsureSuccessStatusCode();

    var json = await res.Content.ReadFromJsonAsync<SignInResponse>();

    return json.IdToken;
}

public static async Task<string> FireBaseSignIn(string token)
{
    var authClient = new HttpClient
    {
        BaseAddress = new Uri("http://localhost:9099/")
    };

    var res = await authClient.PostAsJsonAsync("identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken?key=fake-api-key",
        new { token, returnSecureToken = true });
    res.EnsureSuccessStatusCode();

    var json = await res.Content.ReadFromJsonAsync<SignInResponse>();

    return json.IdToken;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73572913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档