【发布时间】: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