4

我有一个带有 Angular2 UI 的 .NET Core 应用程序,它在我使用 OpenIddict 保护的 Service Fabric 集群中运行。我按照这个例子:https ://github.com/openiddict/openiddict-samples/tree/master/samples/RefreshFlow

当我只有一个无状态 .NET Core 应用程序实例时,它的效果很好。当我将实例数增加到两个时,身份验证失败并且我收到一堆 401 错误。我收到的令牌似乎只对那个特定实例有用,而在另一个实例上被拒绝。我想我理解为什么会发生这种情况,但我不知道如何解决它。

任何帮助将不胜感激。

4

2 回答 2

2

OpenIddict 依赖ASP.NET Core 数据保护堆栈来生成和保护其授权代码、刷新令牌和访问令牌(除非您明确选择 JWT 作为访问令牌格式)。

为了确保可以跨实例读取这些令牌,您必须将 ASP.NET Core 数据保护配置为共享同一个密钥环。如果您需要有关此过程的更多信息,我建议您阅读Microsoft 网站上的相关文档。

于 2017-03-06T17:45:55.097 回答
1

我通过查看这个解决了这个问题:https ://docs.microsoft.com/en-us/aspnet/core/security/data-protection/implementation/key-storage-providers#azure-and-redis

以下是我采取的基本步骤:

  1. 创建一个 Blob 存储帐户来存储共享密钥。

  2. 将以下代码添加到您的 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");

就是这样。

于 2017-04-24T18:19:50.383 回答