Web API 2、OWIN 身份验证、SignOut 不注销

2024-04-13

我正在做一些研究,以期使用 Bearer 令牌作为身份验证机制(即 AngularJS UI,通过 Web API [2] 项目中的 OWIN 进行身份验证)。

我的登录工作正常,角色信息等一切都很好,但我无法获取用于注销的令牌。

我的启动配置是这样的:

OAuthOptions = new OAuthAuthorizationServerOptions() {
    TokenEndpointPath = new PathString("/Token"),
    Provider = new ApplicationOAuthProvider(PublicClientId),
    AccessTokenExpireTimeSpan = SESSION_TIMEOUT,
    AllowInsecureHttp = true
};

我的注销操作很简单:

public HttpResponseMessage Logout() {
    var authentication = HttpContext.Current.GetOwinContext().Authentication;
    authentication.SignOut(DefaultAuthenticationTypes.ExternalBearer);

    return new HttpResponseMessage(HttpStatusCode.OK);
}

为了简洁起见,我省略了所有身份验证内容,但为了确认我正在使用外部承载设置令牌时。

在我的 UI 中,我将令牌存储在本地存储中(这里不涉及 cookie,这是一个经过深思熟虑的设计决策)。所以我有一个logout我的用户界面上的按钮Logout操作被命中并且代码运行良好。

但是,如果我随后在 API 上执行需要授权的操作,请求仍然会通过(即用户仍然经过身份验证,即使他们should已注销。

要么我错过了一些非常明显的东西(这不是第一次;-),要么这里发生了一些更基本的事情 - 最后我正在 ping @leastprivilege,因为我知道这是他们的领域。

任何帮助或见解将不胜感激。


我唯一能想到的是令牌在服务器/API 端是无状态的,因此不能过期或注销。

如果是这样的话,我想我可以:

a) 添加一个刷新令牌,该令牌创建一个在过去过期的新令牌 - 这是否有效? - 实际上取消它,它将发行一个新的令牌......旧的令牌仍然有效

b) 将不记名令牌存储在数据库中并每次检查,在注销时删除令牌(自然加盐、散列等)。然而,这只是让我们回到有状态服务器。

c)当有人明确注销时,我可以(并且将会)从本地存储中删除令牌,但是如果满足以下条件,令牌在技术上仍然有效a baddy可以拦截令牌。自然以上的一切就都结束了SSL无论如何,这应该会抑制坏人/坏女孩.

d) 也许这就是为什么很多人将承载令牌存储在 cookie 中(作为存储机制)的原因,因此一旦您注销,至少 cookie 将在下次刷新时被删除。

抱歉,上面的内容有点脑残,只是想先解决任何问题


由于 OAuth 不是身份验证协议,因此没有注销的概念。删除客户端上的访问令牌 - 这就是您所能做的。

如果您想在服务器端使令牌无效,请向其添加唯一的 ID 并在您的服务中进行跟踪 - 您需要手动构建类似的东西。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Web API 2、OWIN 身份验证、SignOut 不注销 的相关文章

  • ASP.Net-Core 中的自定义身份验证

    我正在开发一个需要与现有用户数据库集成的网络应用程序 我仍然想使用 Authorize 属性 但我不想使用身份框架 如果我确实想使用身份框架 我会在startup cs文件中添加类似的内容 services AddIdentity
  • 有没有办法在 asp.net core 3.1 Rest-API 中使用 Identity Server 功能

    我正在使用 asp net core 3 1 在服务器中使用 Rest API 的项目 以 Angular 作为单页应用程序的前端 从每个客户端 用户需要提供其用户名和密码才能访问 Web API 的受保护部分 我想使用 Identity
  • Asp net Core 获取用户Windows用户名

    在ASP net CORE mvc中构建内联网 我需要获取当前用户的Windows用户名进行登录 我不需要使用Windows身份验证自动登录用户 我已经有一个自定义登录控制器来做到这一点 我只需要他的用户名 它在本地工作正常 但在 IIS
  • 如何在控制器中获取 User()->id (Laravel 8+)

    我正在尝试通过以下方式选择任务用户身份 但我无法将其放入控制器 我从中选择数据DB 我尝试过很多事情 其中 一些来自堆栈溢出 但它不起作用 I tried 1 userId Auth check Auth id true 2 Auth us
  • 如何在 Jenkins 管道中使用 Google 服务帐户进行身份验证

    我想用gcloud在 Jenkins 管道中 因此我必须首先使用 Google 服务帐户进行身份验证 我正在使用https wiki jenkins io display JENKINS Google OAuth Plugin https
  • 为什么 $_SERVER["PHP_AUTH_USER"] 和 $_SERVER["PHP_AUTH_PW"] 没有设置?

    在开始之前 我想指出我浏览过 Stack Overflow 并发现了其他类似的问题 PHP AUTH USER 未设置 https stackoverflow com questions 3663520 php auth user not
  • 在闪亮的应用程序和多个页面中进行身份验证

    在我正在开发的系统中 我有 3 个不同的参与者 用户 管理员 支持团队 使用 Shiny App 我想知道如何向这三个参与者进行身份验证 每个参与者只能访问他们的页面 我发现使用闪亮的服务器专业版可以实现这一点 但它不是免费的 有什么方法可
  • 如何使用 LDAP 进行 Ruby on Rails 身份验证? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个网络应用程序 并且我有一个使用的身份验证方法bcrypt gem它工作正常 但我想将身份验
  • 基于资源的访问控制与基于角色的访问控制

    我正在学习 Apache Shiro 发现了这篇文章 新的 RBAC 基于资源的访问控制 http www stormpath com blog new rbac resource based access control 作者说 您可以将
  • 使用 laravel 检查活动用户状态

    这是非常标准的登录功能和验证 效果很好 但我还想检查用户是否处于活动状态 我在用户表中设置了一列 并将 活动 设置为 0 或 1 public function post login input Input all rules array
  • 使用 Cypress 绕过 UI 登录

    我在绕过 UI 登录时遇到问题 我的 Web 应用程序不使用 API 来验证用户身份 没有像这样的端点 login index php只需打开登录页面并提交表单即可登录 应用程序通过以下方式对用户进行身份验证auth REQUEST use
  • 通过服务删除 Windows 登录屏幕

    我正在尝试从服务启动的可执行文件中删除 Windows 登录屏幕 winlogon 该服务将随 Windows 自动启动 并等待来自另一台计算机的命令 当它收到命令时 它将启动一个 exe 该 exe 将在特定用户名下启动 cmd exe
  • 如何验证最终用户经过身份验证的令牌(使用 Firebase 身份验证)来调用 google cloud run 端点?

    请帮助使用 firebase 身份验证在云运行中进行最终用户身份验证 简短的介绍 我从 firebase 函数提交 Authorization Bearer idToken 标头 并使用电子邮件 密码 firebase 用户进行身份验证的
  • 尝试使用 SQL 身份验证登录失败

    我正在尝试使用 sa 用户名及其密码连接到 SQL Server 2008 在 SQL Server 日志文件中我看到以下错误 用户 sa 登录失败 原因 尝试使用 SQL 登录 认证失败 服务器配置为 Windows 身份验证 仅有的 当
  • 在运行时更改 OwinContext dbContext

    我需要运行时更改dbContext for Request GetOwinContext 使用特定的connectionString但它不起作用 I ve a dbContex class接受默认值connectionString from
  • 使用单个查询和每用户密码盐进行用户登录

    我决定使用存储在数据库中的每用户盐来实现用户登录 盐作为密码的前缀 该密码使用 SHA 进行哈希处理并存储在数据库中 过去 当我不使用盐时 我会使用典型的方法 使用用户输入的用户名和密码来计算查询返回的行数 然而 对于每个用户的盐 您需要先
  • nginx代理认证拦截

    我有几个服务 它们支持 nginx 实例 为了处理身份验证 在 nginx 中 我拦截每个请求并将其发送到身份验证服务 在那里 如果凭据正确 我将设置一个包含用户相关信息的 cookie 现在 请求应该被路由到适当的服务 并设置 cooki
  • ASP.Net Web API:在读取/上传请求正文之前发送响应

    我的控制器上有一个操作 应该上传大型 500mb 2gb 文件 例如 HttpPost public void PostFile FromUri Guid uploadId 在正文内部 执行一些检查 例如 uploadId 是否存在 然后将
  • Asp.Net Core 挑战返回 Null URI 异常错误

    我正在创建 ASP NET Core Web API 并希望集成 Microsoft Azure AD 身份验证服务 在编译时一切正常 但是 当我访问旨在返回挑战的路由时 我收到一个 null URI 异常 下面的 Stacktrace 我
  • 允许 .NET WebApi 忽略 DOCTYPE 声明

    我正在尝试通过 WebApi 方法将 XML 反序列化为对象 我有以下课程 XmlRoot IsNullable false public class MyObject XmlElement Name public string Name

随机推荐

  • JPA实体扩展类包含@Id

    我有实体类都包含 id 作为主键 我可以创建包含所有公共字段的抽象类并允许所有类扩展该类 如下所示 public abstract class CommonFields Id Column name ID private long id p
  • 不可能:没有附加布局管理器;跳过布局

    我完全迷失了这个错误 我理解它 但我不知道出了什么问题 对于代码 In the OnCreate of my activity historyRecyclerView RecyclerView findViewById R id recyc
  • 在 kotlin 中何时一起使用挂起函数和 Flow 或分开使用?

    在审查用 kotlin 编写的一些代码时 有件事引起了我的注意 我在一些项目中查看领域层 在一些项目中 我看到挂起功能和 Flow 一起使用 而在一些项目中 我看到只使用 Flow 例如暂停和流动在一起 class FetchMovieDe
  • 如何在Python中隐藏控制台窗口?

    我正在用 Python 编写一个 IRC 机器人 我希望为 Linux 和 Windows 制作独立的二进制文件 主要是我希望当机器人启动时 控制台窗口应该隐藏 并且用户不应该看到该窗口 我能为此做些什么呢 只需将其保存为 pyw扩大 这将
  • 将一个变量设置为等于另一个变量[重复]

    这个问题在这里已经有答案了 我有一些关于在 JavaScript 中将变量设置为等于另一个变量的问题 假设我们创建一个对象 a并设置b a var a fname Jon lname Smith age 50 var b a 我明白如果我们
  • 音色 `set-config!` 已经改变了数量,因此不知道如何使用它来将 std err/out 输出到文件

    我正在尝试使用https github com ptaoussanis timbre https github com ptaoussanis timbre记录到文件而不是控制台 以下是我找到的一些有关如何执行此操作的文档 The defa
  • 为 libstdc++ 生成 CTAGS(来自当前 GCC)

    I know 你完成了我 https github com Valloric YouCompleteMe基于 LLVM 但我想使用OmniCppComplete http www vim org scripts script php scr
  • 操作码的十六进制值

    我创建了一个非常简单的汇编程序 可以在 DOS 中打印字母 a 我在十六进制编辑器中打开它 结果是这样的 汇编代码 mov ah 2 mov dx a int 21h 十六进制代码 B4 02 B2 61 CD 21 我想了解它是如何生成的
  • 在 pdf 中按宽度调整内容

    渲染为 pdf 时 我需要 html 页面为打印宽度的 100 否则内容会被切断 是否有捷径可寻 我想出了一个解决方法 它在渲染后获取 html 宽度 然后设置缩放系数以强制正确的宽度 var page require webpage cr
  • 如何确定视图的列是派生的还是常量?

    假设我有下表 create table t Item ItemID int not null identity 1 1 constraint PK Item primary key Description varchar 256 not n
  • Apache AVRO 与休息

    我正在评估将 Apache AVRO 用于我的 Jersey REST 服务 我将 Springboot 与 Jersey REST 结合使用 目前我接受 JSON 作为输入 并使用 Jackson 对象映射器将其转换为 Java Pojo
  • Laravel 4:在包中部署自定义 artisan 命令

    我开发了一些自定义 artisan 命令 以便更轻松地与我的包一起使用 是否可以将 artisan 命令包含到包中以便于部署 如果可以 怎样做 Thanks 在你的包结构中有一个命令集
  • 如何获取包含越界对象的绘图尺寸

    我可以这样计算图的高度 library ggplot2 library egg library gridExtra g lt ggplot iris aes x Species y Petal Length stat summary geo
  • 如何在 Laravel 中检索 Mailgun 传递的消息

    在我的 Node js 应用程序中 我遵循了 Mailgun 文档https documentation mailgun com en latest quickstart sending html send with smtp or api
  • GitHub 页面和相对路径

    我创建了一个gh pages我正在 GitHub 上开发的一个项目的分支 我使用 Sublime text 在本地创作网站 我的问题是 当将其推送到 GitHub 时 所有指向 javascrips 图像和 css 文件的链接都无效 例如
  • 如何存储我的网络应用程序的指标?

    我需要为我的网络应用程序存储更多指标 需要随着时间的推移跟踪和比较用户行为和其他条件 有些记录有与之关联的时间戳 有些则没有 因此 按需查询指标可能并不总是合适 我认为需要的是我编写然后存储在某个地方 数据库 文件 的某些分析查询 通过 c
  • find_package 用于使用 Visual Studio 进行调试和发布

    我正在为如何将第三方库包含在我的 cmake 项目中而绞尽脑汁 目前 我构建了 Poco 和其他一堆 它们都生成各自的 Config cmake 我将其与 find package 一起使用 我有一个包装构建脚本 用于构建所有依赖项并将它们
  • 将 Scala Iterable[tuple] 转换为 RDD

    我有一个元组列表 String String Int Double 我想将其转换为 Spark RDD 一般来说 如何将 Scala Iterable a1 a2 a3 an 转换为 Spark RDD 有几种方法可以做到这一点 但最直接的
  • M2Eclipse,META-INF/MANIFEST.MF

    我在 Eclipse 中使用 M2Eclipse 插件 而且不知道什么原因 每次在Eclipse中导入Maven项目时 总是生成一个空的 src main META INF MANIFEST MF 文件 jar 打包的项目 src main
  • Web API 2、OWIN 身份验证、SignOut 不注销

    我正在做一些研究 以期使用 Bearer 令牌作为身份验证机制 即 AngularJS UI 通过 Web API 2 项目中的 OWIN 进行身份验证 我的登录工作正常 角色信息等一切都很好 但我无法获取用于注销的令牌 我的启动配置是这样