c# - 如何在我的其他应用程序中使用自定义 SSO?
问题描述
我试图在我的应用程序中使用自定义 SSO 时碰壁了,所以我想我会退后一步,在这里提问。
我按照这篇文章Identity
在 .Net 5.0(没有)中实现了一个 RESTful 身份验证 API 。我可以通过电子邮件和密码拨打电话以获取 JWT 回复http://localhost:4001/api/auth/login
{
"token": "eyJhb<--removed jwt-->",
"errors": null
}
- 这是一个好方法吗?我不想使用像
Identity
or 那样笨重或复杂的东西OAuth
。 - 如何将其与正常的身份验证“流程”联系起来?我知道您
Challenge
在登录时必须使用身份提供者,但我找不到任何适合我情况的示例。(尝试实现自定义方案,builder.AddJwtBearer("my_scheme", ...
但这是我碰壁的地方)
解决方案
我设法做我想做的事,所以如果有人偶然发现:
事实证明,当它实际上非常简单时,我把它弄得非常复杂......重点是让事情变得简单,所以尝试创建 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
}
注意:我按照这篇文章能够使用公钥(私钥用于创建它)在本地验证令牌。
干杯
推荐阅读
- kubernetes - 重新启动集群时出错:重新启动 kube-proxy:等待 kube-proxy 启动以进行 configmap 更新:等待条件超时
- ffmpeg - LibAV 在文件末尾处理“moov”原子
- java - Java bean 验证
- xml - 是否可以使用 XSLT 将 XML 文件的文件扩展名更改为 CSV?
- django - 具有网格布局的 Django 表单
- php - 使用 PHP SQLSRV 从结果集中返回特定行
- javascript - 是否可以检查变量是否等于窗口对象?
- haskell - 为州实施表演
- python - 我正在尝试在被跟踪的对象上绘制一个 3D 立方体(使用 ORB 和对象的单应性)-opencv Python
- laravel - 如何在我正在进行的项目中添加模板。(依赖冲突)