gpt4 book ai didi

angular - IdentityServer4 受众验证失败

转载 作者:行者123 更新时间:2023-12-05 05:17:40 26 4
gpt4 key购买 nike

好吧,让我感到困惑。我有一个能够使用 IdentityServer4 登录的 Angular 应用程序。 Angular 应用程序是 clientId web。当我解码 jwt 时,aud 只有 web。

我创建了一个 api 资源 - api。

现在,当我尝试使用访问 token 调用我的 .NET Core Api 时,我收到观众验证失败错误。基本上说它期待 web 并且它得到了 api 作为观众。

.AddIdentityServerAuthentication(options =>
{
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.ApiName = "api";
options.SaveToken = true;
});

如果我将 ApiName 更改为 web,它会起作用。 jwt 中列出的范围都符合我的预期。更让我感到困惑的是,当我查看 dbo.PersistedGrants 时,数据中列出的受众是

"Audiences": [
"http://localhost:5000/resources",
"api"
]

客户:

new Client
{
ClientId = "web",
ClientName = "Web",

AccessTokenType = AccessTokenType.Jwt,

AllowedGrantTypes = GrantTypes.Implicit,
AllowAccessTokensViaBrowser = true,
AlwaysIncludeUserClaimsInIdToken = true,

RedirectUris = { "http://localhost:5005" },
PostLogoutRedirectUris = { "http://localhost:5005/logout" },
AllowedCorsOrigins = { "http://localhost:5005", "https://localhost:5005" },

AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
IdentityServerConstants.StandardScopes.Email,
"role",
"api"
},

RequireConsent = false
}

应用程序接口(interface)

new ApiResource("api", "API")

身份资源

return new[]
{
new IdentityResources.OpenId(),
new IdentityResources.Profile(),
new IdentityResources.Email(),
new IdentityResource("role", new[] { JwtClaimTypes.Role })
{
Required = true
}
};

我希望 jwt 对观众具有相同的值(value)观。

是我的理解有误还是我遗漏了一些配置 IdentityServer4 的东西?

最佳答案

确保在您的授权请求中包含 scope: "api"。如果您在针对 IdentityServer(或任何 OIDC 提供商)进行身份验证时没有明确指定所需的范围,您将不会在 jwt 受众属性中获得 api 资源名称。

您的请求应如下所示:

http://my.identiyserverBaseUrl/connect/authorize?client_id= D&redirect_uri= &response_type=token& scope=api&state=[OPTIONAL_STATE]

如果您使用的是 npm oidc-client,那么您的配置对象可能看起来像这样:

const idsConfig = {
authority: 'YOUR_IDENITY_SERVER_BASE_URL',
client_id: 'CLIENT_ID',
redirect_uri: 'YOUR_CLIENT_REDIRECT_URL',
scope: 'api',
response_type: 'token',
client_secret: 'SECRET',
post_logout_redirect_url: `LOGOUT_REDIRECT_URL`,
userStore: new WebStorageStateStore({store: window.localStorage}),
automaticSilentRenew: true, // If you want to enable silent renew
silent_redirect_uri: 'REDIRECT_URL_FOR_SILENT_RENEW'
};

注意范围。您可以请求多个范围,例如 scope: 'api openid email'。如果您请求 openid 范围,您必须在响应类型中包含 id_token

Here's the documentationhere for the JavaScript client setup .

关于angular - IdentityServer4 受众验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48976774/

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