8. Diameter 用户会话 (Diameter User Sessions)
总体而言, Diameter 可向应用提供两类不同服务. 第一类涉及身份验证 (authentication) 与授权 (authorization), 并可选用计费 (accounting). 第二类仅使用计费.
当某服务使用应用中的身份验证和/或授权部分, 且用户请求接入网络时, Diameter 客户端向其本地服务器发出授权请求 (auth request). 该请求在具体业务的 Diameter 应用 (如 NASREQ) 中定义. 请求携带 Session-Id AVP (会话标识 AVP), 用于后续与用户会话相关的消息 (如后续授权, 计费等). Session-Id AVP 使客户端与服务器能够将 Diameter 消息与用户会话关联起来.
当 Diameter 服务器授权用户在有限时间内使用网络资源, 并愿意通过后续请求延长授权时, 必须在应答消息中加入 Authorization-Lifetime AVP (授权生存期 AVP). 该 AVP 定义用户在被服务器期待再次发出授权请求之前, 最多可使用资源的秒数. Auth-Grace-Period AVP (授权宽限期 AVP) 给出在 Authorization-Lifetime 到期之后, 服务器在清理与用户会话相关的全部状态信息之前等待的秒数. 注意, 若服务域预期从用户归属域获得业务付费, 则 Authorization-Lifetime AVP 与 Auth-Grace-Period AVP 一起隐含归属域愿意承担财务责任的最长会话时长. 超出 Authorization-Lifetime 与 Auth-Grace-Period AVP 到期后提供的业务由接入设备负责. 当然, 实际业务成本显然不在本协议范围内.
不预期向服务器发送重授权或会话终止请求的接入设备, 可以包含 Auth-Session-State AVP 且取值 NO_STATE_MAINTAINED, 作为对服务器的提示. 若服务器接受该提示, 即表示一旦用户业务终止将收不到会话终止消息, 因而无法维持会话状态. 若服务器应答中的 Auth-Session-State AVP 为其他值 (或缺省值, 当该 AVP 不存在时), 接入设备必须遵循服务器指示. 注意, 不得在后续重授权请求与应答中设置 NO_STATE_MAINTAINED.
基础协议不包含任何授权请求消息, 因其大多与具体应用相关并在 Diameter 应用文档中定义. 但基础协议定义了一组用于终止用户会话的消息, 供维护状态信息的服务器释放资源.
当某服务仅使用 Diameter 协议的计费部分 (即使与某应用结合) 时, 仍用 Session-Id 标识用户会话. 但不使用会话终止消息, 因为通过发出计费停止 (accounting stop) 消息即可表示会话已终止.
Diameter 也可用于不易归类为认证, 授权或计费的业务 (例如某些第三代合作伙伴计划 (3GPP) 互联网多媒体子系统 (IMS) 接口). 此时后续章节中的有限状态机可能不适用, 应用本身可能需要定义自己的有限状态机. 不过, 此类应用专用状态机应当遵循本文档给出的一般状态机框架, 例如使用 Session-Id AVP, 以及对有状态会话使用 STR/STA, ASR/ASA 消息.
8.1. 授权会话状态机 (Authorization Session State Machine)
本节给出若干有限状态机, 表示 Diameter 会话的生命周期, 所有在 Diameter 应用中使用身份验证和/或授权部分的 Diameter 实现都必须遵守. 下文中的 “Service-Specific (业务相关)” 指在具体 Diameter 应用 (如 Mobile IPv4, NASREQ) 中定义的消息.
Diameter 基础协议支持四种不同的授权会话状态机. 前两种描述服务器维护会话状态的情形, 由 Auth-Session-State AVP 的取值 (或其缺失) 指示, 分别从客户端与服务器视角描述. 后两种在服务器不维护会话状态时使用, 同样分别从客户端与服务器视角描述.
当会话进入 Idle (空闲) 状态, 必须为该会话释放已分配的任何资源. 状态机中未列出的事件必须视为错误条件, 若适用, 必须向消息发起方返回应答.
若某应用不支持重认证 (re-auth), 当客户端与服务器会话均维护状态时, 与服务器发起的重认证相关的状态迁移 (例如发送 RAR, Pending, 收到 RAA) 可以忽略.
在状态表中, 事件 “Failure to send X (发送 X 失败)” 表示 Diameter 代理无法将命令 X 发送到目标目的地, 可能是对等端不可用, 或对等端在对应 Answer 命令的 Result-Code AVP 中返回临时失败或临时协议错误 DIAMETER_TOO_BUSY 或 DIAMETER_LOOP_DETECTED. 事件 “X successfully sent (X 发送成功)” 与 “Failure to send X” 互为补集.
当服务器侧维护状态时, 客户端遵守以下状态机 (下表与 RFC 6733 英文原文一致):
CLIENT, STATEFUL
State Event Action New State
---------------------------------------------------------------------------------------------------
Idle Client or device requests access Send service-specific Pending
auth req auth req
Idle ASR Received for unknown session Send ASA with Idle
Result-Code =
UNKNOWN_SESSION_ID
Idle RAR Received for unknown session Send RAA with Idle
Result-Code =
UNKNOWN_SESSION_ID
Pending Successful service-specific authorization Grant Access Open
answer received with default
Auth-Session-State value
Pending Successful service-specific authorization Sent STR Discon
answer received,
but service not provided
Pending Error processing successful Sent STR Discon
service-specific authorization
answer
Pending Failed service-specific authorization Clean up Idle
answer received
Open User or client device requests access Send service-specific Open
auth req auth req
Open Successful service-specific authorization Provide service Open
answer received
Open Failed service-specific authorization Discon. user/device Idle
answer received.
Open RAR received and client will perform Send RAA with Open
subsequent re-auth Result-Code =
SUCCESS
Open RAR received and client will not perform Send RAA with Idle
subsequent re-auth Result-Code !=
SUCCESS,
Discon. user/device
Open Session-Timeout expires on access device Send STR Discon
Open ASR received, client will comply with Send ASA with Discon
request to end the session Result-Code =
SUCCESS,
Send STR.
Open ASR Received, client will not comply with Send ASA with Open
request to end the session Result-Code !=
SUCCESS
Open Authorization-Lifetime + Auth-Grace-Period Send STR Discon
expires on access device
Discon ASR received Send ASA Discon
Discon STA received Discon. user/device Idle
服务器在维护会话状态时遵守以下状态机:
SERVER, STATEFUL
State Event Action New State
---------------------------------------------------------------------------------------------------
Idle Service-specific authorization request Send successful Open
received, and user is authorized service-specific
answer
Idle Service-specific authorization request Send failed Idle
received, and user is not authorized service-specific
answer
Open Service-specific authorization request Send successful Open
received, and user is authorized service-specific
answer
Open Service-specific authorization request Send failed Idle
received, and user is not authorized service-specific
answer,
Clean up
Open Home server wants to confirm authentication Send RAR Pending
and/or authorization of the user
Pending Received RAA with a failed Result-Code Clean up Idle
Pending Received RAA with Result-Code = SUCCESS Update session Open
Open Home server wants to terminate the service Send ASR Discon
Open Authorization-Lifetime (and Auth-Grace-Period) Clean up Idle
expires on home server
Open Session-Timeout expires on home server Clean up Idle
Discon Failure to send ASR Wait, resend ASR Discon
Discon ASR successfully sent and ASA Received Clean up Idle
with Result-Code
Not Discon ASA Received None No Change
Discon Any STR Received Send STA, Clean up Idle
当服务器不维护状态时, 客户端遵守以下状态机:
CLIENT, STATELESS
State Event Action New State
---------------------------------------------------------------------------------------------------
Idle Client or device requests access Send service-specific Pending
auth req auth req
Pending Successful service-specific authorization Grant access Open
answer received with Auth-Session-
State set to NO_STATE_MAINTAINED
Pending Failed service-specific authorization Clean up Idle
answer received
Open Session-Timeout expires on access device Discon. user/device Idle
Open Service to user is terminated Discon. user/device Idle
当服务器不维护会话状态时, 服务器遵守以下状态机:
SERVER, STATELESS
State Event Action New State
---------------------------------------------------------------------------------------------------
Idle Service-specific authorization request Send successfully Idle
received, and successfully processed processed service-
specific answer
8.2. 计费会话状态机 (Accounting Session State Machine)
包含计费部分或仅需计费服务的应用必须支持以下状态机. 第一个状态机由客户端遵守.
计费命令代码见第 9.7 节, 计费 AVP 见第 9.8 节.
计费状态机中的服务器侧行为在某些情况下取决于具体应用. Diameter 基础协议定义一个缺省状态机, 所有未另行规定状态机的应用都必须遵循, 即本节下文中的第二个状态机.
该缺省服务器侧状态机允许以任意顺序, 任意时刻接收计费记录, 不对这些记录的处理提出规范性要求. Diameter 实现可基于记录执行检查, 排序, 关联, 反欺诈等任务, 这些任务中可能需要检查 AVP. 任务可在记录接收后立即执行, 或在后处理阶段执行. 由于这些任务通常取决于应用乃至策略, Diameter 规范不予标准化. 应用可基于 Accounting-Realtime-Required AVP 的取值, 信用额度检查等, 对何时接受计费记录提出要求.
此外, Diameter 基础协议定义一个可选的服务器侧状态机, 需要在计费服务器跟踪会话状态的应用可以遵循. 注意此类跟踪与长时间维持连接故障的能力不相容. 因此, 仅建议在 Accounting-Realtime-Required AVP 取值为 DELIVER_AND_GRANT 的应用中使用该状态机, 此时计费连接故障必须导致被服务用户断开. 否则, 客户端产生的记录可能在连接恢复后被不再接受这些记录的服务器丢失. 该状态机为本节第三个状态机, 由监督会话定时器 Ts 监管, Ts 应明显高于 Acct_Interim_Interval. Ts 可取为 Acct_Interim_Interval 的两倍, 以免短暂瞬态网络故障就使 Diameter 服务器上的计费会话进入 Idle.
状态机中未列出的事件必须视为错误条件, 若适用, 必须向消息发起方返回相应应答.
在状态表中, 事件 “Failure to send” 表示 Diameter 客户端无法与目标目的地通信, 可能是对等端不可用, 或对等端在 Accounting Answer 命令的 Result-Code AVP 中返回 DIAMETER_OUT_OF_SPACE, DIAMETER_TOO_BUSY 或 DIAMETER_LOOP_DETECTED 等临时失败或临时协议错误.
事件 “Failed answer” 表示 Diameter 客户端在 Accounting Answer 命令中收到非临时失败通知.
注意, 动作 “Disconnect user/dev” 还必须影响授权会话状态表, 例如若应用同时包含身份验证/授权与计费部分, 则应导致发送 STR.
状态 PendingS, PendingI, PendingL, PendingE 与 PendingB 分别表示等待与 Start, Interim, Stop, Event 或缓存记录相关的计费请求应答的待定状态 (下表与 RFC 6733 英文原文一致).
CLIENT, ACCOUNTING
State Event Action New State
---------------------------------------------------------------------------------------------------
Idle Client or device requests access Send accounting PendingS
accounting start req. start req.
Idle Client or device requests a one-time service Send accounting PendingE
accounting event req event req
Idle Records in storage Send record PendingB
record
PendingS Successful accounting start answer received Open
PendingS Failure to send and buffer space available Store Start Open
and real time not equal to Record
DELIVER_AND_GRANT
PendingS Failure to send and no buffer space available Open
and real time equal to GRANT_AND_LOSE
PendingS Failure to send and no buffer space available Disconnect user/dev Idle
and real time not equal to
GRANT_AND_LOSE
PendingS Failed accounting start answer received and Open
real time equal to GRANT_AND_LOSE
PendingS Failed accounting start answer received and Disconnect user/dev Idle
real time not equal to GRANT_AND_LOSE
PendingS User service terminated stop Store stop PendingS
record
Open Interim interval elapses Send accounting PendingI
interim
record
Open User service terminated Send accounting PendingL
stop req.
PendingI Successful accounting interim answer received Open
PendingI Failure to send and (buffer space available Store interim Open
or old interim record can be overwritten) record
and real time not equal to
DELIVER_AND_GRANT
PendingI Failure to send and no buffer space available Open
and real time equal to GRANT_AND_LOSE
PendingI Failure to send and no buffer space available Disconnect user/dev Idle
and real time not equal to GRANT_AND_LOSE
PendingI Failed accounting interim answer received and Open
real time equal to GRANT_AND_LOSE
PendingI Failed accounting interim answer received and Disconnect user/dev Idle
real time not equal to GRANT_AND_LOSE
PendingI User service terminated stop Store stop PendingI
record
PendingE Successful accounting event answer received Idle
PendingE Failure to send and buffer space available Store event Idle
record
PendingE Failure to send and no buffer space available Idle
PendingE Failed accounting event answer received Idle
PendingB Successful accounting answer received Delete record Idle
PendingB Failure to send Idle
PendingB Failed accounting answer received Delete record Idle
PendingL Successful accounting stop answer received Idle
PendingL Failure to send and buffer space available Store stop Idle
record
PendingL Failure to send and no buffer space available Idle
PendingL Failed accounting stop answer received Idle
SERVER, STATELESS ACCOUNTING
State Event Action New State
---------------------------------------------------------------------------------------------------
Idle Accounting start request received and Send accounting Idle
successfully processed. start answer
Idle Accounting event request received and Send accounting Idle
successfully processed. event answer
Idle Interim record received and successfully Send accounting Idle
processed. interim answer
Idle Accounting stop request received and Send accounting Idle
successfully processed stop answer
Idle Accounting request received; no space left Send accounting Idle
to store records answer;
Result-Code =
OUT_OF_SPACE
SERVER, STATEFUL ACCOUNTING
State Event Action New State
---------------------------------------------------------------------------------------------------
Idle Accounting start request received and Send accounting Open
successfully processed. start answer;
Start Ts
Idle Accounting event request received and Send accounting Idle
successfully processed. event answer
Idle Accounting request received; no space left Send accounting Idle
to store records answer;
Result-Code =
OUT_OF_SPACE
Open Interim record received and successfully Send accounting Open
processed. interim answer;
Restart Ts
Open Accounting stop request received and Send accounting Idle
successfully processed stop answer;
Stop Ts
Open Accounting request received; no space left Send accounting Idle
to store records answer;
Result-Code =
OUT_OF_SPACE;
Stop Ts
Open Session supervision timer Ts expired Stop Ts Idle
8.3. 服务器发起的重认证 (Server-Initiated Re-Auth)
Diameter 服务器可通过发出 Re-Auth-Request (RAR, 重认证请求) 对特定会话发起重认证和/或重授权.
例如, 预付费业务中, 原先授权会话的服务器可能需要确认用户仍在使用业务.
接入设备收到 Session-Id 等于当前活动会话的 RAR 时, 若业务支持该能力, 必须向用户发起重认证. 各 Diameter 应用必须说明是否支持服务器发起的重认证, 因为有些应用不允许接入设备提示用户重认证.
8.3.1. Re-Auth-Request
Re-Auth-Request (RAR) 由命令码 258 且消息标志中 ‘R’ 位置位指示, 可由任意服务器发往提供会话业务的接入设备, 请求对用户重新认证和/或重新授权.
消息格式 (Message Format)
::= < Diameter Header: 258, REQ, PXY >
< Session-Id >
{ Origin-Host }
{ Origin-Realm }
{ Destination-Realm }
{ Destination-Host }
{ Auth-Application-Id }
{ Re-Auth-Request-Type }
[ User-Name ]
[ Origin-State-Id ]
* [ Proxy-Info ]
* [ Route-Record ]
* [ AVP ]
8.3.2. Re-Auth-Answer
Re-Auth-Answer (RAA) 由命令码 258 且 ‘R’ 位清除指示, 作为对 RAR 的响应. Result-Code AVP 必须存在, 表示对请求的处理结果.
成功的 RAA 之后必须再发送应用专用的身份验证和/或授权消息.
消息格式 (Message Format)
::= < Diameter Header: 258, PXY >
< Session-Id >
{ Result-Code }
{ Origin-Host }
{ Origin-Realm }
[ User-Name ]
[ Origin-State-Id ]
[ Error-Message ]
[ Error-Reporting-Host ]
[ Failed-AVP ]
* [ Redirect-Host ]
[ Redirect-Host-Usage ]
[ Redirect-Max-Cache-Time ]
* [ Proxy-Info ]
* [ AVP ]
8.4. 会话终止 (Session Termination)
对于已授权且服务器正在维护其状态的会话, 有必要在会话不再活跃时通知 Diameter 服务器, 既用于跟踪, 也使有状态代理能够释放为用户会话提供的任何资源. 不维护状态的会话不使用本节.
当需要 Diameter 授权的用户会话终止时, 提供业务的接入设备必须向授权该业务的 Diameter 服务器发出 Session-Termination-Request (STR, 会话终止请求), 告知会话不再活跃. 无论因何原因终止 (包括用户注销, Session-Timeout 到期, 管理操作, 收到 Abort-Session-Request 后终止 (见下文), 接入设备有序关闭等), 都必须发送 STR.
对于已授权但实际从未启动的会话, 接入设备也必须发出 STR, 例如接入设备突然资源不足, 不愿提供授权所请求的业务类型, 或不支持授权返回的必选 AVP 等.
也可能因代理行为导致已授权会话实际未启动. 例如代理在将消息转发给接入设备之前修改授权应答, 将结果由成功改为失败. 若应答中未含取值为 NO_STATE_MAINTAINED 的 Auth-Session-State AVP, 导致已授权会话未启动的代理必须向授权该会话的 Diameter 服务器发出 STR, 因为接入设备无法知道会话曾被授权.
收到 STR 的 Diameter 服务器必须清理与 STR 中 Session-Id 相关的资源 (如会话状态), 并返回 Session-Termination-Answer (STA).
当 Session-Timeout 到期, 或 Authorization-Lifetime 与 Auth-Grace-Period AVP 到期且未收到重授权请求时, Diameter 服务器也必须清理资源, 无论是否收到该会话的 STR. 不应期望接入设备在这些定时器到期后继续提供业务, 因此任一定时器到期都意味着接入设备可能已异常关闭.
8.4.1. Session-Termination-Request
Session-Termination-Request (STR) 由命令码 275 且 Command Flags 中 ‘R’ 位置位指示, 由 Diameter 客户端或 Diameter 代理发送, 告知 Diameter 服务器已认证和/或已授权的会话正在终止.
消息格式 (Message Format)
::= < Diameter Header: 275, REQ, PXY >
< Session-Id >
{ Origin-Host }
{ Origin-Realm }
{ Destination-Realm }
{ Auth-Application-Id }
{ Termination-Cause }
[ User-Name ]
[ Destination-Host ]
* [ Class ]
[ Origin-State-Id ]
* [ Proxy-Info ]
* [ Route-Record ]
* [ AVP ]
8.4.2. Session-Termination-Answer
Session-Termination-Answer (STA) 由命令码 275 且 ‘R’ 位清除指示, 由 Diameter 服务器发送, 确认已收到会话终止通知. Result-Code AVP 必须存在, 并可指明处理 STR 时发生错误.
在发送或收到 STA 后, Diameter 服务器必须释放 Session-Id AVP 所指会话的全部资源. 代理链中的中间服务器如有需要也可释放资源.
消息格式 (Message Format)
::= < Diameter Header: 275, PXY >
< Session-Id >
{ Result-Code }
{ Origin-Host }
{ Origin-Realm }
[ User-Name ]
* [ Class ]
[ Error-Message ]
[ Error-Reporting-Host ]
[ Failed-AVP ]
[ Origin-State-Id ]
* [ Redirect-Host ]
[ Redirect-Host-Usage ]
[ Redirect-Max-Cache-Time ]
* [ Proxy-Info ]
* [ AVP ]
8.5. 中止会话 (Aborting a Session)
Diameter 服务器可发出 Abort-Session-Request (ASR, 中止会话请求), 要求接入设备停止对特定会话提供业务.
例如, 原先授权会话的服务器可能因余额不足或初始授权时未预料到的其他原因而必须停止该会话.
接入设备收到 Session-ID 等于当前活动会话的 ASR 时, 可以停止会话, 是否停止取决于实现和/或配置, 例如仅对某些代理发出的 ASR 作出响应. 无论如何, 接入设备必须用 Abort-Session-Answer 响应, 并包含 Result-Code AVP 说明所采取的动作.
8.5.1. Abort-Session-Request
Abort-Session-Request (ASR) 由命令码 274 且 ‘R’ 位置位指示, 可由任意 Diameter 服务器或代理发往提供会话业务的接入设备, 请求停止 Session-Id 标识的会话.
消息格式 (Message Format)
::= < Diameter Header: 274, REQ, PXY >
< Session-Id >
{ Origin-Host }
{ Origin-Realm }
{ Destination-Realm }
{ Destination-Host }
{ Auth-Application-Id }
[ User-Name ]
[ Origin-State-Id ]
* [ Proxy-Info ]
* [ Route-Record ]
* [ AVP ]
8.5.2. Abort-Session-Answer
Abort-Session-Answer (ASA) 由命令码 274 且 ‘R’ 位清除指示, 作为对 ASR 的响应. Result-Code AVP 必须存在, 表示对请求的处理结果.
若 ASR 中 Session-Id 所指会话已成功终止, Result-Code 置为 DIAMETER_SUCCESS. 若会话当前不活跃, 置为 DIAMETER_UNKNOWN_SESSION_ID. 若因其他原因接入设备未停止会话, 置为 DIAMETER_UNABLE_TO_COMPLY.
消息格式 (Message Format)
::= < Diameter Header: 274, PXY >
< Session-Id >
{ Result-Code }
{ Origin-Host }
{ Origin-Realm }
[ User-Name ]
[ Origin-State-Id ]
[ Error-Message ]
[ Error-Reporting-Host ]
[ Failed-AVP ]
* [ Redirect-Host ]
[ Redirect-Host-Usage ]
[ Redirect-Max-Cache-Time ]
* [ Proxy-Info ]
* [ AVP ]
8.6. 从 Origin-State-Id 推断会话终止
Origin-State-Id 用于检测那些因接入设备意外关闭而不会发出 STR 的已终止会话.
Diameter 客户端或接入设备每次启动或上电时递增 Origin-State-Id, 连接服务器后立即在 CER/CEA 中发送新值. 服务器通过比较其为该客户端保存的旧 Origin-State-Id 是否小于新值, 以及是否存在源自该客户端的未终止会话, 可判断发送方客户端是否曾异常关闭.
若接入设备与服务器之间存在中继或代理, 也可在 CER 以外的请求中包含 Origin-State-Id. 但此时除非 (且直到) 收到来自该设备的新请求, 服务器无法发现其已重启, 故该机制在代理与中继场景下更具机会性.
Diameter 服务器可假定在检测到客户端重启之前处于活动状态的所有会话均已终止, 可清理与此类丢失会话相关的全部会话状态, 也可对在上游服务器上授权的此类丢失会话发出 STR, 以便全局清理会话状态.
8.7. Auth-Request-Type AVP
Auth-Request-Type AVP (AVP 代码 274) 类型为 Enumerated (枚举), 出现在应用专用授权请求中, 告知对等端用户仅需认证, 仅需授权, 或两者都要. 注意除 “两者都要” 外的取值可能导致与 RADIUS 的互操作问题. 定义如下取值:
AUTHENTICATE_ONLY 1
请求仅用于认证, 必须包含 Diameter 服务器认证用户所需的相应应用专用认证 AVP.
AUTHORIZE_ONLY 2
请求仅用于授权, 必须包含识别所请求/所提供业务所必需的应用专用授权 AVP.
AUTHORIZE_AUTHENTICATE 3
请求同时要求认证与授权, 必须同时包含相关应用专用认证信息以及识别所请求/所提供业务所必需的授权信息.
8.8. Session-Id AVP
Session-Id AVP (AVP 代码 263) 类型为 UTF8String, 用于标识特定会话 (见第 8 节). 与某会话相关的所有消息必须只含一个 Session-Id AVP, 且在会话整个生命周期内必须使用相同取值. 若存在, Session-Id 应紧接在 Diameter 头之后 (见第 3 节).
Session-Id 必须全局且永久唯一, 旨在无需其他信息即可唯一标识用户会话, 并可能用于将历史认证信息与计费信息关联. Session-Id 包含强制部分与实现定义部分, 下文给出实现定义部分的推荐格式.
Session-Id 必须以 DiameterIdentity 类型编码的发送方身份开头 (见第 4.3.1 节). 其余部分以 “;” 分隔, 可以是客户端能保证永久唯一的任意序列, 但推荐以下格式 (方括号 [] 表示可选元素):
<high>;<low>[;<optional>]
<high> 与 <low> 为单调递增 64 位值的高, 低 32 位的十进制表示, 拆成两段以便 32 位处理器格式化. 启动时, 高 32 位可初始化为 NTP 格式时间 [RFC5905], 低 32 位可初始化为零, 在重启耗时超过一秒的前提下可实际消除重启后 Session-Id 重叠的可能. 实现也可在非易失存储中跟踪递增值.
<optional> 由实现定义, 可含调制解调器设备 ID, 二层地址, 时间戳等.
无可选部分的示例:
accesspoint7.example.com;1876543210;523
含可选部分的示例:
accesspoint7.example.com;1876543210;523;[email protected]
Session-Id 由发起会话的 Diameter 应用创建, 多数情况下由客户端完成. 注意同一应用的认证, 授权与计费命令可共用 Session-Id.
8.9. Authorization-Lifetime AVP
Authorization-Lifetime AVP (AVP 代码 291) 类型为 Unsigned32, 表示在向用户再次要求重认证和/或重授权之前, 可向其提供业务的最大秒数. 取值应谨慎, 过小的非零值会产生大量 Diameter 流量, 可能拥塞网络与代理.
取值为零 (0) 表示接入设备必须立即重认证. 缺省本 AVP, 或取全 1 (32 位字段全为 1) 表示不预期重认证.
若消息中同时存在本 AVP 与 Session-Timeout AVP, 后者不得小于 Authorization-Lifetime AVP.
重授权消息中可出现 Authorization-Lifetime AVP, 表示从接入设备收到重授权应答时起用户被授权接受业务的秒数.
客户端可提供本 AVP 作为愿意接受的最大生存期提示, 服务器返回的值必须小于或等于客户端提供的值.
8.10. Auth-Grace-Period AVP
Auth-Grace-Period AVP (AVP 代码 276) 类型为 Unsigned32, 表示在 Authorization-Lifetime AVP 到期后, Diameter 服务器在清理会话资源前等待的秒数.
8.11. Auth-Session-State AVP
Auth-Session-State AVP (AVP 代码 277) 类型为 Enumerated, 指明是否为特定会话维护状态. 客户端可在请求中包含本 AVP 作为提示, 但以服务器应答中的取值为准. 支持如下取值:
STATE_MAINTAINED 0
表示维护会话状态, 用户业务终止时接入设备必须发送会话终止消息, 此为缺省值.
NO_STATE_MAINTAINED 1
表示在 Authorization-Lifetime 到期时接入设备不发送会话终止消息.
8.12. Re-Auth-Request-Type AVP
Re-Auth-Request-Type AVP (AVP 代码 285) 类型为 Enumerated, 出现在应用专用授权应答中, 告知客户端在 Authorization-Lifetime 到期时应执行的动作.
若应答含取正值的 Authorization-Lifetime AVP, 则应答中必须包含 Re-Auth-Request-Type AVP. 定义如下:
AUTHORIZE_ONLY 0
Authorization-Lifetime 到期时预期仅授权型重认证, 若包含 Authorization-Lifetime 的应答中未出现本 AVP, 此为缺省.
AUTHORIZE_AUTHENTICATE 1
Authorization-Lifetime 到期时预期身份验证与授权型重认证.
8.13. Session-Timeout AVP
Session-Timeout AVP (AVP 代码 27) [RFC2865] 类型为 Unsigned32, 表示在终止会话前可向用户提供业务的最大秒数. 若应答中同时存在 Session-Timeout 与 Authorization-Lifetime AVP, 前者必须大于或等于后者.
因 Session-Timeout 到期而在接入设备上终止的会话必须触发 STR, 除非接入设备与归属服务器此前已约定不发送会话终止消息 (见第 8 节).
重授权应答中可出现 Session-Timeout AVP, 表示从重认证开始起剩余的秒数.
取值为零或缺省本 AVP 表示会话在终止前可无限制秒数.
客户端可提供本 AVP 作为愿意接受的最大超时提示, 服务器返回值可小于或等于客户端提供的值.
8.14. User-Name AVP
User-Name AVP (AVP 代码 1) [RFC2865] 类型为 UTF8String, 含 User-Name, 格式与 NAI 规范 [RFC4282] 一致.
8.15. Termination-Cause AVP
Termination-Cause AVP (AVP 代码 295) 类型为 Enumerated, 表示接入设备上会话终止的原因. 当前分配值见 IANA 的 Termination-Cause AVP Values 登记项 [IANATCV].
8.16. Origin-State-Id AVP
Origin-State-Id AVP (AVP 代码 278) 类型为 Unsigned32, 为单调递增值, 在 Diameter 实体因丢失先前状态而重启 (如重启) 时递增. Origin-State-Id 可出现在任意 Diameter 消息中, 含 CER.
发出本 AVP 的实体在每次状态复位时必须产生更大的取值, 可设为启动时间, 或在非易失存储中保留跨重启的递增计数器.
若存在 Origin-State-Id, 必须反映 Origin-Host 所指实体的状态. 若代理修改 Origin-Host, 必须删除 Origin-State-Id 或一并适当修改. 典型地, 接入设备启动时无活动会话, 即重启前活动的会话均已丢失, 通过携带 Origin-State-Id 可使其他实体推断与较低 Origin-State-Id 关联的会话不再活跃. 若接入设备不希望被如此推断, 不得在任何消息中包含 Origin-State-Id, 或将其置 0.
8.17. Session-Binding AVP
Session-Binding AVP (AVP 代码 270) 类型为 Unsigned32, 可出现在应用专用授权应答中. 若存在, 可告知 Diameter 客户端本会话今后所有应用专用重认证与 Session-Termination-Request 消息必须发往同一授权服务器.
本字段为位掩码, 已定义位如下:
RE_AUTH 1
置位时, 本会话后续重认证消息不得含 Destination-Host AVP, 清除 (缺省) 时所有重认证消息必须含 Destination-Host AVP.
STR 2
置位时, 本会话的 STR 不得含 Destination-Host AVP, 清除 (缺省) 时 STR 必须含 Destination-Host AVP.
ACCOUNTING 4
置位时, 本会话所有计费消息不得含 Destination-Host AVP, 清除 (缺省) 时若已知则所有计费消息必须含 Destination-Host AVP.
8.18. Session-Server-Failover AVP
Session-Server-Failover AVP (AVP 代码 271) 类型为 Enumerated, 可出现在不含 Session-Binding AVP, 或 Session-Binding AVP 中某位为零的应用专用授权应答中. 若存在, 可告知 Diameter 客户端: 若因投递问题导致重认证或 STR 失败, 应再发一条不含 Destination-Host AVP 的后续消息. 缺省时缺省值为 REFUSE_SERVICE.
支持如下取值:
REFUSE_SERVICE 0
重认证或 STR 投递失败时终止用户业务, 不再重试.
TRY_AGAIN 1
重认证或 STR 投递失败时, 在不带 Destination-Host AVP 的情况下重发失败消息.
ALLOW_SERVICE 2
重认证投递失败时假定重授权已成功, STR 投递失败时会话终止.
TRY_AGAIN_ALLOW_SERVICE 3
重认证或 STR 投递失败时先不带 Destination-Host AVP 重发, 若重认证第二次仍失败则假定重授权成功, 若 STR 第二次仍失败则会话终止.
8.19. Multi-Round-Time-Out AVP
Multi-Round-Time-Out AVP (AVP 代码 272) 类型为 Unsigned32, 应在 Result-Code AVP 为 DIAMETER_MULTI_ROUND_AUTH 的应用专用授权应答中出现. 本 AVP 给出接入设备必须提供给用户响应认证请求的最大秒数.
8.20. Class AVP
Class AVP (AVP 代码 25) 类型为 OctetString, 由 Diameter 服务器向接入设备返回状态信息. 应用专用授权应答中含一个或多个 Class AVP 时, 后续重授权, 会话终止与计费消息中也必须携带. 重授权应答中的 Class AVP 覆盖此前任意授权应答中的 Class AVP. 服务器实现不应返回需在客户端占用超过 4096 字节的 Class AVP. 客户端收到超过本地可用存储的 Class AVP 时必须终止会话.
8.21. Event-Timestamp AVP
Event-Timestamp (AVP 代码 55) 类型为 Time, 可出现在 Accounting-Request 与 Accounting-Answer 中, 记录所报告事件发生的时间, 以自 1900-01-01 00:00 UTC 起的秒数表示.