10个版本
0.3.1 | 2024年1月9日 |
---|---|
0.3.0 | 2023年3月30日 |
0.2.4 | 2021年8月24日 |
0.2.3 | 2021年3月9日 |
0.1.2 | 2020年3月21日 |
#559 in 身份验证
2,997每月下载量
在35个crate中使用(通过libgssapi)
8KB
102 代码行
libgssapi
一个安全的MIT许可gssapi绑定
更多信息请参阅rfc2744
gssapi是一个非常庞大且复杂的旧系统(就像计算机编年史一样古老)。所以虽然这个库可能适用于许多机制,但到目前为止,它只与Kerberos 5和MIT和Apple的实现进行了测试。
要获取一个更简单的跨平台Kerberos 5接口,请参阅cross-krb5。
客户端和服务器之间的KRB5相互认证示例
use libgssapi::{
name::Name,
credential::{Cred, CredUsage},
error::Error,
context::{CtxFlags, ClientCtx, ServerCtx, SecurityContext},
util::Buf,
oid::{OidSet, GSS_NT_HOSTBASED_SERVICE, GSS_MECH_KRB5},
};
fn setup_server_ctx(
service_name: &[u8],
desired_mechs: &OidSet
) -> Result<(ServerCtx, Name), Error> {
let name = Name::new(service_name, Some(&GSS_NT_HOSTBASED_SERVICE))?;
let cname = name.canonicalize(Some(&GSS_MECH_KRB5))?;
let server_cred = Cred::acquire(
Some(&cname), None, CredUsage::Accept, Some(desired_mechs)
)?;
Ok((ServerCtx::new(&server_cred), cname))
}
fn run(service_name: &[u8]) -> Result<(), Error> {
let desired_mechs = {
let mut s = OidSet::new()?;
s.add(&GSS_MECH_KRB5)?;
s
};
let (server_ctx, cname) = setup_server_ctx(service_name, &desired_mechs)?;
let client_cred = Cred::acquire(
None, None, CredUsage::Initiate, Some(&desired_mechs)
)?;
let client_ctx = ClientCtx::new(
&client_cred, service_name, CtxFlags::GSS_C_MUTUAL_FLAG, Some(&GSS_MECH_KRB5)
))
let mut server_tok: Option<Buf> = None;
loop {
match client_ctx.step(server_tok.as_ref().map(|b| &**b))? {
None => break,
Some(client_tok) => match server_ctx.step(&*client_tok)? {
None => break,
Some(tok) => { server_tok = Some(tok); }
}
}
}
let secret_msg = client_ctx.wrap(true, b"super secret message")?;
let decoded_msg = server_ctx.unwrap(&*secret_msg)?;
Ok(())
}
依赖关系
~0–1.8MB
~36K SLoC