You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Identity Server 4与Angular 5集成报错:unauthorized_client Invalid redirect_uri

解决Identity Server 4的unauthorized_client Invalid redirect_uri错误

这个问题本质上就是客户端发送的redirect_uri和Identity Server允许的列表不匹配,而且Identity Server的匹配是严格到每一个字符的——哪怕多一个斜杠、协议不对、IP写错都会触发这个错误。我帮你梳理几个最可能的问题点:

1. 先检查Identity Server的客户端配置

你需要确保AllowedRedirectUris里配置的是Angular客户端的完整绝对URL,而不是示例里的localhost。比如用C#配置客户端时,应该写成这样:

new Client
{
    ClientId = "你的Angular客户端ID",
    // 其他基础配置...
    AllowedRedirectUris = { "http://192.168.1.60:4200/callback" }, // 这里要和Angular里的redirectUri完全一致
    // 其他权限/范围配置...
}

注意:这里不能写localhost:4200/callback,必须替换成你实际部署的IP和端口,还要加上正确的回调路径(比如/callback或者/assets/signin-callback.html,取决于你用的Angular OAuth库)。

2. 核对Angular客户端的redirectUri配置

Angular这边的redirectUri必须和Identity Server里的AllowedRedirectUris完全一致,包括:

  • 协议:如果是HTTP就都写http,HTTPS就都写https(两边要统一)
  • IP和端口:必须是192.168.1.60:4200,不能是localhost
  • 路径:比如用angular-oauth2-oidc的话,默认回调路径是/callback,那就要写成http://192.168.1.60:4200/callback
  • 末尾斜杠:比如服务器里配置的是/callback,客户端就不能写成/callback/,反之亦然,必须完全匹配

推荐你用动态生成的方式避免硬编码出错,比如:

export const authConfig: AuthConfig = {
  issuer: 'http://192.168.1.50:5000',
  redirectUri: window.location.origin + '/callback', // 自动获取当前客户端的IP和端口
  clientId: '你的客户端ID',
  // 其他配置...
};

3. 关于redirect_uri的误区纠正

你问redirect_uri是不是客户端应用内的路径?答案是不是,它必须是一个绝对URL。Identity Server需要知道把授权后的令牌回调到哪个具体的网络地址,所以必须是完整的「协议+IP/域名+端口+路径」组合。示例用localhost是因为本地开发时客户端跑在localhost,实际部署到局域网就必须替换成对应的IP。

4. 快速定位差异的技巧

打开Identity Server的调试日志(临时开启即可),里面会明确显示类似这样的信息:

The redirect URI 'xxx' is not allowed for client 'xxx'. Allowed redirect URIs are 'yyy'

对比日志里的xxx(客户端实际发送的)和yyy(服务器允许的),就能一眼看到哪里不匹配了。

内容的提问来源于stack exchange,提问作者Sushil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:31:49