带有SPA和hellojs的IdentityServer4

时间:2019-02-05 11:06:01

标签: single-page-application identityserver4 oidc hello.js

我基于dotnet新模板“ IdentityServer4快速入门UI(仅UI资产)”(is4ui)创建了IdentityServer。

这与服务器渲染的MVC应用程序一起使用效果很好,但是我无法使用hellojs将其与SPA一起使用。

我在摆弄URL以显示Identity Server的登录页面。登录逻辑运行正常,但我认为缺少任何小片段都无法通过访问令牌正确重定向到我的客户端应用。

这是我用来初始化hellojs的代码:

const AuthorityUrl = 'http://localhost:5000';
hello.init({
  'openidconnectdemo': {
    oauth: {
      version: '2',
      auth: AuthorityUrl + '/Account/Login',
      grant: AuthorityUrl + '/Grant'
    },
    scope_delim: ' '
  }
});

hello.init({
  openidconnectdemo: this.authConfig.clientId
});

这是登录代码

hello.login('openidconnectdemo', {
  redirect_uri: this.authConfig.redirectUrl,
  scope: `openid profile`,
  response_type: 'token',
  display: 'page',
});

在AccountController中的此代码中,Identity Server尝试重定向到应用程序,但是由于ReturnUrl为null,因此失败:

                if (Url.IsLocalUrl(model.ReturnUrl))
                {
                    return Redirect(model.ReturnUrl);
                }
                else if (string.IsNullOrEmpty(model.ReturnUrl))
                {
                    return Redirect("~/");
                }
                else
                {
                    // user might have clicked on a malicious link - should be logged
                    throw new Exception("invalid return URL");
                }

我是否必须修改Identity Server才能使其一起工作,或者客户端部分缺少某些内容?

谢谢您的指教!

1 个答案:

答案 0 :(得分:1)

我可能建议使用oidc-client-js,因为它是OIDC的完整实现,应该更容易上手。

也就是说,您的第一个问题似乎是auth URL应该指向授权端点,而不是UI的登录-即它应该是/connect/authorize而不是/account/login