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

.NET 9中用AspNet.Security.OAuth.Apple配置Apple登录报无效重定向URL

.NET 9中Apple登录配置的"invalid web redirect url"问题排查

问题背景

旧版.NET应用已成功实现Apple登录,迁移到.NET 9应用后,配置复用并适配现代.NET Identity机制,却出现Apple授权页面返回invalid_request Invalid web redirect url错误。已在Apple开发者后台添加新域名和重定向URI,配置值(ClientId/KeyId/TeamId)均与旧版一致,本地测试通过Fiddler将local.myappusers.com映射到localhost:port。

当前配置代码(Program.cs)

builder.Services.AddAuthentication()
    [... 其他提供程序在此,运行正常 ...]
    .AddApple(options =>
    {
        options.CallbackPath = "/api/auth/signin-apple";
        options.ClientId = builder.Configuration.GetValue<string>("pl-microservices-myappusers:Authentication:AppleClientId");
        options.KeyId = builder.Configuration.GetValue<string>("pl-microservices-myappusers:Authentication:AppleKeyId");
        options.TeamId = builder.Configuration.GetValue<string>("pl-microservices-myappusers:Authentication:AppleTeamId");
        options.PrivateKey = (_, _) => Task.FromResult(
            builder.Configuration.GetValue<string>("pl-microservices-myappusers:Authentication:ApplePrivateKey")
            .AsMemory()
        );
        options.GenerateClientSecret = true;

        options.Events.OnRedirectToAuthorizationEndpoint = context =>
        {
            var uriBuilder = new UriBuilder(context.RedirectUri);

            var query = QueryHelpers.ParseQuery(uriBuilder.Query);
            query["redirect_uri"] = "https://local.myappusers.com/api/auth/signin-apple";

            var newQuery = QueryString.Create(
                query.SelectMany(q => q.Value, (q, v) => new KeyValuePair<string, string>(q.Key, v))
            );

            uriBuilder.Query = newQuery.ToString().TrimStart('?');

            context.Response.Redirect(uriBuilder.Uri.ToString());

            return Task.CompletedTask;
        };
    });

Apple开发者后台配置

  • 域名:local.myappusers.com
  • 重定向URI:https://local.myappusers.com/api/auth/signin-apple

错误现象

跳转至https://appleid.apple.com/auth/authorize?[...]后,页面显示:

invalid_request
Invalid web redirect url.

手动在OnRedirectToAuthorizationEndpoint中修改redirect_uri后问题依然存在。

问题排查与解决方案建议

1. 移除手动修改redirect_uri的自定义逻辑

Apple验证要求请求中的redirect_uri与生成Client Secret时使用的URI完全一致,手动修改可能导致不匹配。删除OnRedirectToAuthorizationEndpoint的自定义代码,让AspNet.Security.OAuth.Apple自动生成正确的redirect_uri:

// 移除这段自定义逻辑
// options.Events.OnRedirectToAuthorizationEndpoint = context =>
// {
//     ...
// };

2. 修正PrivateKey的格式处理

Apple的PrivateKey需要是完整的PEM格式(包含-----BEGIN PRIVATE KEY-----头部和-----END PRIVATE KEY-----尾部),配置字符串中的换行符可能被转义,需手动还原:

var privateKey = builder.Configuration.GetValue<string>("pl-microservices-myappusers:Authentication:ApplePrivateKey")
    .Replace("\\n", "\n");
options.PrivateKey = (_, _) => Task.FromResult(privateKey.AsMemory());

3. 显式指定SignInScheme与完整回调路径

.NET 9中Identity机制可能需要明确指定登录Scheme,同时确保CallbackPath的格式正确:

options.CallbackPath = new PathString("/api/auth/signin-apple");
options.SignInScheme = IdentityConstants.ApplicationScheme; // 适配.NET Identity的默认Scheme

4. 验证本地HTTPS配置

Apple要求重定向URI必须使用HTTPS,确保本地localhost:port使用有效的HTTPS证书:

  • 运行dotnet dev-certs https --trust生成并信任本地开发证书
  • 检查Fiddler代理是否正确处理HTTPS流量,避免篡改URI的协议或端口

5. 确认Apple Service ID配置细节

  • 确保ClientId对应的Service ID已启用Sign In with Apple功能
  • 检查Domains and Subdomains中已添加local.myappusers.com
  • 重定向URI需精确匹配(无多余斜杠、参数,协议为HTTPS)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:05:54