首页 > 解决方案 > 如何在我的其他应用程序中使用自定义 SSO?

问题描述

我试图在我的应用程序中使用自定义 SSO 时碰壁了,所以我想我会退后一步,在这里提问。

我按照这篇文章Identity在 .Net 5.0(没有)中实现了一个 RESTful 身份验证 API 。我可以通过电子邮件和密码拨打电话以获取 JWT 回复http://localhost:4001/api/auth/login

{
    "token": "eyJhb<--removed jwt-->",
    "errors": null
}

标签: c#.netauthenticationjwt

解决方案


我设法做我想做的事,所以如果有人偶然发现:

事实证明,当它实际上非常简单时,我把它弄得非常复杂......重点是让事情变得简单,所以尝试创建 en 身份验证方案是题外话。这是最终代码:

        using var client = new HttpClient() { BaseAddress = new Uri("http://localhost:4001/api/") };
        try
        {
            var stringContent = new StringContent(JsonSerializer.Serialize(new { email = model.Email, password = model.Password }), Encoding.UTF8, "application/json");
            var result = await client.PostAsync("auth/login", stringContent);

            var jsonResponse = await result.Content.ReadAsStringAsync();
            var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true };
            var authResult = JsonSerializer.Deserialize<AuthResult>(jsonResponse, options);

            var jwt = authResult.Token.Jwt;
            var isValidJwt = JwtHelper.ValidateCurrentToken(jwt, _myExternalAuthSettings.RsaPub, _myExternalAuthSettings.Issuer);

            if (isValidJwt)
            {
                HttpContext.Response.Cookies.Append("my_auth", jwt, new CookieOptions()
                {
                    Domain = "localhost",
                    Expires = DateTimeOffset.FromUnixTimeSeconds(authResult.Token.UnixTimeExpiresAt)
                });
                // finish authenticating the user
            }
            // something failed
        }

注意:我按照这篇文章能够使用公钥(私钥用于创建它)在本地验证令牌。

干杯


推荐阅读