我有一个.NET Core应用程序,在我使用OpenIddict保护的Service Fabric Cluster中运行Angular2 UI。我按照这个例子:https://github.com/openiddict/openiddict-samples/tree/master/samples/RefreshFlow
当我只有一个无状态.NET Core应用程序实例时,它很有用。当我将实例数增加到2时,身份验证失败,我得到了一堆401错误。我收到的令牌似乎只对该特定实例有用,而在另一个实例上被拒绝。 我想我明白为什么会这样,但我不知道如何解决它。
非常感谢任何帮助。
答案 0 :(得分:1)
OpenIddict依赖于ASP.NET Core Data Protection stack来生成和保护其授权码,刷新令牌和访问令牌(除非您明确选择JWT作为访问令牌格式)。
要确保可以跨实例读取这些令牌,必须配置ASP.NET Core Data Protection以共享相同的密钥环。如果您需要有关此过程的更多信息,建议您阅读the related documentation on Microsoft's website。
答案 1 :(得分:0)
以下是我采取的基本步骤:
创建blob存储帐户以存储共享密钥。
将以下代码添加到Startup.cs:
var storageAccount = CloudStorageAccount.Parse("blob storage connection string");
//Create the blob client object.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
//Get a reference to a container to use for the sample code, and create it if it does not exist.
CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");
container.CreateIfNotExists();
services.AddDataProtection()
.SetApplicationName("MyApplication")
.PersistKeysToAzureBlobStorage(container, "myblobname");
就是这样。