【问题标题】:Changing .Net Core OpenID Connect Authorization Flow 'redirect_uri' value更改 .Net Core OpenID Connect 授权流程“redirect_uri”值
【发布时间】:2018-09-22 22:58:01
【问题描述】:

我已根据我的 IdP 示例说明 (https://www.onelogin.com/blog/how-to-use-openid-connect-authentication-with-dotnet-core) 将 .Net Core Web 应用配置为使用授权代码模型使用 OpenID Connect 进行身份验证:

services.AddAuthentication(options => {
    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect(o => {
    o.ClientId = "[Client ID]";
    o.ClientSecret = "[Client Secret]";
    o.Authority = "[Authority]";
    o.ResponseType = "code";
    o.GetClaimsFromUserInfoEndpoint = true;
});

然后我的控制器设置为需要身份验证:

[Authorize]
public IActionResult About()
{
   ViewData["Message"] = "You must be authenticated to view the About page";
   return View();
}

我还配置了 ngrok 以提供一个临时公共 URL,该 URL 应该在身份验证流程中使用,并使用以下命令重定向回我的站点:

ngrok http 5000 -host-header="localhost:5000"

此命令成功设置代理,运行后,我可以通过代理 url(例如 https://75c97570.ngrok.io)浏览到该站点。

我遇到的问题是,当我尝试浏览“关于”页面时,我被重定向到 IdP 站点并提示按预期登录,但是,“redirect_uri”值通过查询字符串是我的“本地主机”地址 (https://localhost:5000/signin-oidc) 而不是 ngrok 代理地址 (https://75c97570.ngrok.io/signin-oidc)。这导致了一个问题,因为我的 IdP 需要一个非本地 url(因此是 ngrok 代理),因此传递的 redirect_uri 值(localhost)与我的 IdP 帐户(ngrok)中配置的值不匹配,我收到一条错误消息'redirect_uri 不匹配任何客户端注册的 redirect_uris'。

我假设这是一个 .Net 配置问题。有没有办法告诉 .Net 使用 ngrok 代理地址作为重定向时的“redirect_uri”值,而不是 localhost 地址?我尝试在 OpenID Connect 配置选项中使用“CallbackPath”选项,但似乎这只允许当前 url 的子路径(例如http://localhost:5000/[something])并且不能用于指定完全不同的网址。是否有另一种方法可以配置重定向以使用代理 url?

谢谢!

【问题讨论】:

    标签: .net-core openid-connect onelogin


    【解决方案1】:

    好的,经过一番挖掘,我找到了解决此问题的方法。我在 OpenIdConnect 服务的初始化中添加了以下代码:

    .AddOpenIdConnect(o => {
    
    ...(snip)...
    
        o.Events.OnRedirectToIdentityProvider = (context) =>
        {
            context.ProtocolMessage.RedirectUri = "https://75c97570.ngrok.io/signin-oidc";
    
            return Task.FromResult(0);
        };
    
    ...(snip)...
    
    }
    

    这可以改变重定向时传递给我的 IdP 的“redirect_uri”值。不确定这是否是处理此问题的最佳方法,但它确实有效。

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 2018-05-20
      • 2015-12-11
      • 2018-12-19
      • 1970-01-01
      • 2015-03-26
      • 2019-06-15
      • 2021-11-11
      • 2017-05-05
      相关资源
      最近更新 更多