IdentityServer4 文档站点上的大多数(全部?)示例代码使用AddDeveloperSigningCredential(),但建议AddSigningCredential()在生产中使用。我花了更多的时间来思考如何做到这一点。
如何创建签名证书并在生产中的 IdentityServer4 中使用它?
我正在 ASP.NET Core 3.1 中编写 API,使用 EF Core 访问 SQL Server 数据库。我在 API 中有一个函数,需要调用带有多个输入参数和一个输出参数的存储过程。该函数的简化版本如下。
我正在使用DbContextwith.UseInMemoryDatabase()进行其他测试,但内存数据库不能与存储过程一起使用。
(这个解决方案是数据库优先,而不是代码优先。如果需要,可以更改存储过程,但如果不需要的话会更好。我可以更改我的 C# 函数以不同的方式调用存储过程不过如果这有帮助的话。)
如何对该功能进行单元测试?
public class MyFoo : IFoo
{
public ApplicationDbContext DbContext { get; }
public MyFoo(ApplicationDbContext dbContext)
{
DbContext = dbContext;
}
public async Task<bool> GetMyStoredProcResult(string val1, string val2, string val3, string val4, string val5)
{
// input validation removed for brevity
var p1 = new SqlParameter
{
ParameterName = "p1",
DbType = System.Data.DbType.String,
Direction = System.Data.ParameterDirection.Input,
Value = …Run Code Online (Sandbox Code Playgroud) stored-procedures xunit.net entity-framework-core asp.net-core asp.net-core-3.1
Microsoft 建议不要HttpContext在 Blazor Server 中使用(此处)。为了解决如何将用户令牌传递到 Blazor Server 应用程序的问题,Microsoft 建议将令牌存储在服务中Scoped(此处)。Jon McGuire\xe2\x80\x99s 博客建议采用类似的方法将令牌存储在Cache(此处)中。
只要用户保持在同一个 Blazor 服务器连接中,上述 Microsoft\xe2\x80\x99s 方法就可以正常工作。但是,如果access_token刷新并且用户通过按 F5 或将 URL 粘贴到地址栏中来重新加载页面,则会尝试从 cookie 中检索令牌。此时, cookie中的和access_token就refresh_token不再有效了。Jon McGuire 在他的博客文章末尾提到了这个问题,并将其称为 Stale Cookies(此处)。他给出了有关可能的解决方案的提示,但对实施说明却很少提及。该帖子的底部有许多来自无法实施解决方案的人的评论,但没有提出明显的可行解决方案。我花了很多时间寻找解决方案,但我发现人们都在寻求解决方案,但没有收到任何有效的答案。
找到了一个似乎运行良好并且似乎相当有原则的解决方案后,我认为可能值得在这里分享我的解决方案。我欢迎任何建设性的批评或对任何重大改进的建议。
\noauth access-token openid-connect refresh-token blazor-server-side