总是从 Identity Server 获取“invalid_client”
Posted
技术标签:
【中文标题】总是从 Identity Server 获取“invalid_client”【英文标题】:Always getting "invalid_client" from Identity Server 【发布时间】:2020-07-14 18:00:03 【问题描述】:一切似乎正常,但它不起作用,它返回“Invalid_Client” - (400 - 错误请求)。 下面两边都这么简单;
身份服务器代码:
new Client
ClientId = "js",
ClientSecrets =
new Secret("secret".Sha256())
,
AllowedGrantTypes = GrantTypes.ClientCredentials,
RequireClientSecret = false,
AllowedScopes =
"api1"
javascript 客户端代码:
axios.post('http://localhost:5000/connect/token',request,
headers:
'client_id' : 'js',
'client_secret' : 'secret',
'grant_type': 'client_credentials',
'scope' : 'api1'
);
【问题讨论】:
【参考方案1】:参数应该在请求体而不是请求头中传递,您可以将客户端脚本修改为:
const params = new URLSearchParams();
params.append('client_id', 'js');
params.append('client_secret', 'secret');
params.append('grant_type', 'client_credentials');
params.append('scope', 'api1');
axios.post('http://localhost:5000/connect/token', params,
headers:
'Content-Type': 'application/x-www-form-urlencoded',
).then(function (response)
console.log(response.data);
);
另外配置CORS是在客户端配置上使用AllowedCorsOrigins集合:
new Client
ClientId = "js",
ClientSecrets =
new Secret("secret".Sha256())
,
AllowedCorsOrigins= new List<string>() "http://localhost:5002" ,
AllowedGrantTypes = GrantTypes.ClientCredentials,
RequireClientSecret = false,
AllowedScopes =
"api1"
,
【讨论】:
【参考方案2】:不应使用 normall fetch 或轴。
因为该服务是 Oauth 服务,应该使用 'client-oauth2' 库。
代码示例:
var ClientOAuth2 = require("client-oauth2");
var authRequest = new ClientOAuth2(
clientId: IDENTITY_CONFIG.client_id,
clientSecret: IDENTITY_CONFIG.client_secret,
accessTokenUri: IDENTITY_CONFIG.token_endpoint,
scopes: [IDENTITY_CONFIG.grantType]
);
return authRequest.credentials.getToken();
【讨论】:
以上是关于总是从 Identity Server 获取“invalid_client”的主要内容,如果未能解决你的问题,请参考以下文章
Reset Identity Column Value in SQL Server (Identity Reset)
React Template w/Identity Server not working in .NET 6 - Bearer error The issuer is invalid
如何使用 Sql Server 2008 获取用于插入到 select 中的 scope_identity 列表?
oidc-client-js 未从 Identity Server 4 正确获取声明
使用ORCID凭据通过Identity Server登录我的应用程序
ASP.NET 核心 blazor webassembly 为 Identity Server 4 Postman 测试获取令牌