80C51初始化设置SP值时,应如何考虑?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了80C51初始化设置SP值时,应如何考虑?相关的知识,希望对你有一定的参考价值。

参考技术A 堆栈是一种数据结构,它是一个8位寄存器,它指示堆栈顶部在内部RAM中的位置。系统复位后,SP的初始值为07H,使得堆栈实际上是从08H开始的。但我们从RAM的结构分布中可知,08H—1FH隶属1—3工作寄存器区,若编程时需要用到这些数据单元,必须对堆栈指针SP进行初始化,原则上设在任何一个区域均可,但一般设在30H—7FH之间较为适宜。
一般直接 mov sp #70h,就可以了,放在便笺区即可。

SAML 2.0 单次注销问题 - IdP 应如何终止在不同用户代理中运行的 SP 会话?

【中文标题】SAML 2.0 单次注销问题 - IdP 应如何终止在不同用户代理中运行的 SP 会话?【英文标题】:Issue with SAML 2.0 single logout - How should IdP terminate SP sessions running in different user agents? 【发布时间】:2020-07-01 13:58:15 【问题描述】:

我在使用 SAML 2.0 单次注销时遇到问题。

我有一个 SAML 2.0 环境,其中包含一个 IdP(身份提供者)和一个充当 SP(服务提供者)的 Web 应用程序。

作为用户,我在用户代理(浏览器)中启动 Web 应用程序会话。使用 IdP 对用户进行身份验证。

在不同的浏览器中(在同一台客户端计算机上运行),我在同一个 Web 应用程序中以同一个用户的身份启动另一个会话,即在 SAML 方面在同一个 SP 中。

现在我有两个独立的 Web 应用程序会话,其中对同一用户进行身份验证。

然后,当我在其中一个浏览器中执行由 IdP 发起的单次注销时,IdP 仅发出一个注销请求,该请求会终止在该浏览器中运行的会话。 IdP 发出的注销请求的元素等于 IdP 在使用该浏览器(用户代理)发送到 SP 的断言的 AuthnStatement 的属性 SessionIndex 中发送的元素。

IdP 是否真的有必要为所有打开的会话发送注销请求以实现真正的“单次注销”?

【问题讨论】:

【参考方案1】:

简短回答:SAML 规范允许单点注销 (SLO) 以您想要的方式运行,但典型的实现并不那么复杂。

来自SAML Profiles 规范,第 4.4 节(单一注销配置文件):

一旦委托人通过身份提供者的身份验证, 认证实体可以与委托人建立会话 (通常通过 cookie、URL 重写或其他方式 实现特定的手段)。身份提供者可能随后 向服务提供商或其他依赖方发出断言,基于 在此身份验证事件上;依赖方可以使用它来 与委托人建立自己的会话。在这种情况下, 身份提供者可以充当 会话授权 和依赖 各方作为会话参与者

如果 SLO 序列由会​​议参与者之一发起,那么整个讨论将毫无意义。该规范要求会话参与者通过身份提供者最初发送给会话参与者的唯一 ID(又名 会话索引)来识别正在终止的“共享”会话。根据规范的要求,此 ID 在您的 SP 会话 #1 和 SP 会话 #2 中会有所不同。

...但是当 SLO 序列由 IdP 启动时,您的方案是可能的。第 4.4.4.1 节讨论了关于发布和处理<LogoutRequest> 的规则:

如果请求者是会话参与者,它必须至少包括 请求中的一个<SessionIndex> 元素。 [...] 如果请求者是 会话权限(或代表其行事),则它可以省略任何此类 指示所有主体的终止的元素 适用会话

翻译:如果您能以某种方式告诉 IdP 发出 <LogoutRequest> 而没有 <SessionIndex>并且您的 SP 足够成熟,可以正确解释此类请求并且 SP 可以通过其后端终止特定用户的所有会话,那么您就赢了。

实际上,上述条件的组合是一个非常高的要求。开箱即用,大多数 IdP 不会在没有 <SessionIndex> 的情况下发出 <LogoutRequest>。极少数甚至为实现 SLO 而烦恼的 SP 不会接受没有 <SessionIndex> 的请求。在极少数情况下,您将能够提出正确的 <LogoutRequest> 并且 SP 不会对此感到窒息,如果 SP 正确识别所有 IdP 发起的会话,您将非常非常幸运,并且将能够通过后端终止它们。

【讨论】:

以上是关于80C51初始化设置SP值时,应如何考虑?的主要内容,如果未能解决你的问题,请参考以下文章

应如何设置HashMap容量的初始值?

为关系内部的属性设置值时“无法调用 NSManagedObject 类上的指定初始化程序”(核心数据)

SP2-1504:无法打印未初始化的 LOB 变量

AVR单片机的堆栈指针SP初值是啥

如何在 react native 中使用选择器从 redux 状态设置 usestate 的初始值?

RedShift - 插入初始单个值时,在某些情况下不尊重标识种子值