【问题标题】:How to use claims in WebApi with OAuth如何通过 OAuth 在 WebApi 中使用声明
【发布时间】:2015-04-01 10:56:52
【问题描述】:

我有一个带有 OAuth 身份验证的 WebApi2 应用程序,我使用声明将用户 ID 与访问令牌相关联,因此在控制器中我可以知道哪个用户正在访问。

第一季度。这是个好方法吗?

第二季度。有没有办法在 Owin WebApi 应用程序中访问控制器外部的声明值?一种情况是当我将我的服务绑定到我的 DI 容器中并且我想将用户 ID 传递给服务时

【问题讨论】:

    标签: c# asp.net-web-api oauth owin


    【解决方案1】:
    • A1:是的,它是最流行的身份验证/授权方法之一。
    • A1。通常您将当前用户身份放入 Thread.CurrentPrincipal 它有一个拥有您当前用户 ID 的 Claims 成员

    【讨论】:

    • 我用我的 ClaimIdentity 设置了 CurrentPrincipal 和一个新的 ClaimPrincipal,其中包含一个带有 userId 的声明,当我尝试绑定我的服务时我使用 Ninject 作为我的 DI 容器我使用 ToMethod 来延迟实例化服务,在我将 Thread.CurrentPrincipal 称为 ClaimsPrincipal 的方法中,但我在声明列表中找不到 userId,列表为空。我错过了什么吗?
    • 您的链中是否有任何异步调用?可能是因为您在一个线程中设置了 CurrentPrincipal 并从另一个线程中读取它?
    • 查看这个要点 gist.github.com/marciotoshio/e54e590bb7ca9d10bbf4 它显示了我在哪里创建我的 Principal 以及我在哪里尝试使用它
    • 问题出在您的 GrantResourceOwnerCredentials 方法中,您正在创建 ClaimsIdentity 的新实例并将声明添加到该对象。您应该将声明添加到 CurrentThread.ClaimsPrincipal 上的同一对象
    • 没关系,问题是当我尝试访问 NInject 绑定中的信息时,可能没有调用此类 aspnetwebstack.codeplex.com/SourceControl/latest#src/… 的 Invoke 方法如果您按照此方法进行操作,您将看到一个方法SetPrincipal(IPrincipal 用户),如果我在任何控制器的操作中访问 Thread.CurrentPrincipal,我可以访问声明。现在我需要在这种情况发生后找到一种 Ninject 注入服务的方法。 JabbR 中的@Pinpoint 指向我那里有一个 Owin 频道
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 2017-10-25
    • 2015-03-02
    • 2011-10-20
    • 2021-07-29
    • 2014-06-26
    相关资源
    最近更新 更多