Identity Server端点OIDC

时间:2017-05-11 21:32:31

标签: asp.net-mvc iis asp.net-core identityserver3 identityserver4

我正在使用Identity Server并在IIS下托管它。直接在http://localhost:44431

下托管时工作正常

第1步:致电http://localhost:44431/account/login?returnUrl=/connect/authorize/login?respone_type ....  第2步:然后转到授权端点并返回令牌

在localhost \ id下的Probelm托管:

但是,当我在默认网站下的IIS上部署应用程序为localhost\id时。它停止工作。

第1步:致电http://localhost/id/account/login?returnUrl=/connect/authorize/login?respone_type ....

>>检查请求标题:

enter image description here

>>响应标题:

enter image description here

>>在http://localhost/id/.well-known/openid-configuration

打开ID配置
  "authorization_endpoint":"http://localhost/id/connect/authorize",

第2步:调用/connect/authorize端点:

>>检查标题:

enter image description here

它没有包含id虚拟目录,这就是它失败的原因。在这个过程中我必须解决这个问题?

1 个答案:

答案 0 :(得分:1)

我无法重现您的问题,但我确实从头开始在IIS中托管IdentityServer4。我遵循设置的步骤如下。

  1. 克隆的IdentityServer4.Samples。启动Quickstarts / 3_ImplicitFlowAuthentication解决方案: https://github.com/IdentityServer/IdentityServer4.Samples/tree/release/Quickstarts/3_ImplicitFlowAuthentication
  2. 在IIS中创建了一个应用程序,其路径为' / id'将AppPool设置为“无托管代码”
  3. Ran' dotnet发布'在IdentityServer4项目上并将输出移动到IIS应用程序根文件夹
  4. 将MvcClient项目中的权限URL更改为指向localhost / id

    app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
    {
        AuthenticationScheme = "oidc",
        SignInScheme = "Cookies",
        Authority = "http://localhost/id",
        RequireHttpsMetadata = false,
        ClientId = "mvc",
        SaveTokens = true
    });
    
  5. 加载MvcClient应用程序并导航到包含'授权'过滤。使用适当的虚拟目录

  6. 正确地进行了重定向

    转到openid-configuration页面,检查IdentityServer是否输出了正确的路径:http://localhost/id/.well-known/openid-configuration

    您是否在同一个项目中运行IdentityServer4和MVC应用程序?如果是这样,您是否使用OpenIdConnectOptions.Authority属性的相对路径?尝试将其更改为绝对路径,看看是否能解决问题。我认为可能是这种情况,因为您的请求网址在重定向uri中不包含/ id路径:

    http://localhost/id/account/login?**returnUrl=/connect/authorize/login**?respone_type
    

    当然正确的道路应该是:

    http://localhost/id/account/login?**returnUrl=/id/connect/authorize/login**?respone_type
    

    希望这有帮助!请让我知道