gpt4 book ai didi

azure - Azure 上的 IdentityServer4 invalid_token "The issuer is invalid",在 localhost 上工作

转载 作者:行者123 更新时间:2023-12-03 12:12:55 24 4
gpt4 key购买 nike

请帮忙,我正在使用 ionic 前端构建 .NET Core API。我想使用 ASPNET Core Identity,所以我或多或少遵循了这个示例 https://identityserver4.readthedocs.io/en/release/quickstarts/6_aspnet_identity.html

这是我在 Startup.cs 中的内容

// Adds IdentityServer
services.AddIdentityServer()
.AddTemporarySigningCredential()
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddInMemoryApiResources(Config.GetApiResources())
.AddInMemoryClients(Config.GetClients(Configuration))
.AddAspNetIdentity<ApplicationUser>();

app.UseIdentity();
app.UseIdentityServer();
app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
Authority = API_address,
RequireHttpsMetadata = false,

ApiName = "myAPIs"
});

在我的 Config.cs 文件中,我有内存配置

public class Config
{
// scopes define the resources in your system
public static IEnumerable<IdentityResource> GetIdentityResources()
{
return new List<IdentityResource>
{
new IdentityResources.OpenId(),
new IdentityResources.Profile(),
};
}

// scopes define the API resources in your system
public static IEnumerable<ApiResource> GetApiResources()
{
return new List<ApiResource>
{
new ApiResource(
"myAPIs", // Api resource name
"My API Set #1", // Display name
new[] { JwtClaimTypes.Name, JwtClaimTypes.Role }) // Claims to be included in access token
};
}

// client want to access resources (aka scopes)
public static IEnumerable<Client> GetClients(IConfigurationRoot configuration)
{
return new List<Client>
{
new Client
{
ClientId = "myClient",
ClientName = "My Custom Client",
AllowedCorsOrigins = new List<string>
{
"whateverINeedHere"
},
AccessTokenLifetime = 60 * 60 * 24,
AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
RequireClientSecret = false,
AccessTokenType = AccessTokenType.Jwt,
AllowedScopes =
{
"myAPIs"
}
}
};
}
}

现在的问题是,当我在本地测试时,一切正常。我点击/connect/token 端点,得到 token 响应,点击需要 token 授权的 Controller ,我的声明就在那里。但是,当我将其部署到 Azure 时,当我想要使用 token (从该环境颁发)时,我收到 401 Unauthorized,响应 header invalid_token“颁发者无效”。我用谷歌搜索过,但人们得到的是带有签名问题的无效 token ,而不是发行者。我以前从未使用过身份服务器,对我来说这看起来像是一些配置问题。我比较了从 jwt.io 上的身份服务器获得的 token ,它们看起来完全相同,唯一的区别是发行者 localhost -> myAPIAddress。

有人能指出我正确的方向吗?

最佳答案

这听起来像是临时签名凭证。当我的证书未加载时,我在部署到 Azure 时也遇到了问题。

我建议您按照以下说明创建一个自签名证书并将其添加到 azure。 (请注意,这可以在新门户中完成)。 https://azure.microsoft.com/en-us/blog/using-certificates-in-azure-websites-applications/

记住:请确保添加 WEBSITE_LOAD_CERTIFICATES 应用程序设置!

也为了您的利益,这是我用来在我的startup.cs中加载证书的代码。我在存储库中保留了证书的副本,以便我可以从磁盘加载它作为后备(当我在我的开发计算机上时)。

X509Certificate2 cert = null;
using (X509Store certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser))
{
certStore.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certCollection = certStore.Certificates.Find(
X509FindType.FindByThumbprint,
// Replace below with your cert's thumbprint
"A9781679661914B7539BE020EE9C4F6880579F42",
false);
// Get the first cert with the thumbprint
if (certCollection.Count > 0)
{
cert = certCollection[0];
// Use certificate
Log.Logger.Information($"Successfully loaded cert from registry: {cert.FriendlyName}");
}
}

// Fallback to local file for development
if (cert == null)
{
cert = new X509Certificate2(Path.Combine(_env.ContentRootPath, "myauth.pfx"), "mypassword");
Log.Logger.Information($"Falling back to cert from file. Successfully loaded : {cert.FriendlyName}");
}

services.AddIdentityServer()
.AddSigningCredential(cert)

关于azure - Azure 上的 IdentityServer4 invalid_token "The issuer is invalid",在 localhost 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43002127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com