在OIDC和MVC中检索声明

时间:2018-02-22 04:40:03

标签: owin openid-connect oidc

我有一个带有以下代码行的控制器:

document.querySelector("[camera]").getObject3D('camera')

在我的Startup.Auth.cs中,我有以下内容:

        if (!Request.IsAuthenticated)
        {
            HttpContext.GetOwinContext().Authentication.Challenge(OpenIdConnectAuthenticationDefaults.AuthenticationType);
        }

在OnTokenValidate中,我应该得到我的主张,我假设。如果是这样,我该怎么做呢。我知道我有一个SecurityTokenValidatedNotification,但该对象的任何方法或成员似乎都没有公开与Claims相关的任何内容。我需要以某种方式存储这些声明,以便我可以在我的控制器上检索它。

2 个答案:

答案 0 :(得分:0)

通常对于服务器端Web应用程序,上述Microsoft库默认只使用id令牌中返回的声明。这些声明来自您的授权服务器。

自定义逻辑的位置是在AuthorizationCodeReceived处理程序中。通常你会:

  • 创建新的身份验证票据
  • 自定义其声明
  • 声明将被序列化为您的身份验证Cookie
  • 对您的应用的每个后续请求都将反序列化Cookie

常见的事情是:

  • 将刷新令牌添加到您的声明中
  • 在ID令牌外添加其他声明
  • 也许添加您从数据库或其他API中读取的声明

这里有一些示例代码可以帮助您入门: https://github.com/IdentityServer/IdentityServer3/issues/2457

答案 1 :(得分:0)

啊 - 我明白了:

设计考虑因素

  • 通常,MS库是为服务器端授权代码流而设计的,您使用响应类型='代码id_token'
  • 隐含流使用'令牌id_token'我不认为上面的图书馆支持这种流程
  • 此外,如果您需要在登录后调用API,则需要获取一个'代码'这样你就可以获得访问权限

UPSHOT:如果使用上述库,我建议使用' code id_token' - 它可能会解决你的问题。

通过电线返回什么?

你能看到id令牌中返回的内容(通过Online JWT viewer)吗?这应该是您声称的来源。

IMPLICIT FLOW

这是在UI中的Javascript代码中实现的,而不是在服务器端代码中实现的。在我写的基于教程的博客上有一些关于这个的东西: