我已经开始调查凭证提供者是如何工作的,但由于糟糕的文档,我被困在了几个地方。
我有控制台应用程序(有点像ssh服务器),当我远程连接到这个应用程序和认证(没有登录),我希望它能够转发这些凭据凭证提供商,我希望CP登录用户(创建会话)。
我还注意到,在文档中,它说SetSerialization
方法总是在SetusageScenario
之后被调用。但是我添加了日志,而且SetSerialization
在SetusageScenario
之后永远不会被调用。
正如我所知,当应用程序提供凭据时,会调用Set序列化
。我不明白通过申请提供证明是什么意思?似乎这就是我需要的,将凭据从应用程序转发到凭据提供商,但是我怎么做呢?是否有一些函数可以从凭据提供商dll调用以触发登录?
我有没有办法做到这一点?我已经读到,当远程登录完成时,UpdateRemoteCredential
被调用,但据我所知(如果我错了,请纠正我),在远程登录中,它意味着RDP
,但我的应用程序很简单,它只监听一些端口,获取用户名和密码,然后使用Logonuser
函数。
名为MxLogon2
的程序实现了这个方案。安装了MxLogon2
的远程服务器可以在远程桌面会话中验证连接到客户端的USB密钥(但我需要用户名/密码)。
任何能指引我走正确道路的建议都将不胜感激。
P. S.
我使用pGina
作为我的凭据提供程序。
我不介意在你的情况下进行太多的序列化。这用于预初始化磁贴。
例如,使用RDP连接,您可以在系统上存储凭据证书。此功能用于使用这些凭据预查询磁贴(但不是唯一的解决方案)。
让它在你的情况下返回E_NOTIMPL。
提供程序的主要目的是初始化凭据和磁贴:
通过SetUsageScenario函数(在提供程序构造后自动调用)完成。在这里,您可以根据所处的场景自定义行为。最基本的是CPU_登录。它应该是这样的(这只是一个预览)
HRESULT Provider::SetUsageScenario(
__in CREDENTIAL_PROVIDER_USAGE_SCENARIO cpus,
__in DWORD dwFlags
)
{
HRESULT hr;
switch(cpus)
{
case CPUS_UNLOCK_WORKSTATION:
case CPUS_LOGON:
hr = this->_InitCredential();
break;
default:
hr = E_INVALIDARG;
break;
}
return hr;
}
从GetCredentialCount函数开始。它允许您定义要显示的平铺数量(pdwCount out参数),以及要用作默认平铺的平铺数量(pdwDefault)。自动登录也在这里处理(通过pbAutoLogonWithDefault)。
然后在GetCredentialAt函数中开始Tiles枚举。
传递用于身份验证的凭据是在通过GetSeriize函数使用的凭据中完成的。
这里可以找到实现的例子。我几乎不坚持以身作则,因为它很容易根据你想要达到的目标而转移注意力。这是非常灵活的,您最好了解任何函数/参数的用途,以符合您的目标。
EDIT-参见评论:
#define IDCredential 0x1
Credential::Credential(Provider* parent)
{
//Do ssh connection or whatever
if(success)
{
parent->login = retrievedLogin;
parent->pwd = retrievedPwd;
parent->CredentialUsed = IDCredential;
parent->autoLogin = true;
parent->ProviderEvents->CredentialsChanged(AdviseContext);
}
}
HRESULT Provider::GetCredentialCount(
__out DWORD* pdwCount,
__out_range(<,*pdwCount) DWORD* pdwDefault,
__out BOOL* pbAutoLogonWithDefault
)
{
if(this->autoLogin && this->CredentialUsed)
{
*pbAutoLogonWithDefault = true; // --> Instant call to GetSerialization
*pdwDefault = this->CredentialUsed; //index of the tile
}
else
{
*pbAutoLogonWithDefault = false;
*pdwDefault = IDCredential;
}
return S_OK;
}
在我们的应用程序中,我们使用InstanceProfileCredentialsProvider访问AmazonS3存储桶,但在我们的一些环境中,凭据被弄乱了。 AWS文件(https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-roles.html)内容如下: 如果应用程序使用默认构造函数创建AWS客户端,则客户端将
我已经构建了一个自定义凭据提供程序,它在Windows SDK中作为示例提供。它在计算机上工作得很好。 当CR安装在远程服务器上,人们通过RDP连接到它时,会两次提示用户输入用户名/密码对,第一次是在本机RDP客户端中,第二次是在自定义凭据提供程序本身中,当用户通过本机RDP客户端成功登录时。 有没有办法获取第一步输入的用户名和密码,并将其写入CR字段。
问题内容: 我正在使用Django Rest Framework开发API。我试图列出或创建“订单”对象,但是当我尝试访问控制台时,出现此错误: 观看次数: 序列化器: 我的网址: 然后我在控制台中使用以下命令: 错误说: 问题答案: 通过在我的settings.py中添加“ DEFAULT_AUTHENTICATION_CLASSES”来解决
我已经为MFA开发了一个自定义凭证提供程序,它运行良好。我通过调用REST API在GetSerialization()方法中执行额外的身份验证检查。现在,如果通过REST API成功验证,我允许用户登录。但是对于验证失败的情况,我想显示错误屏幕,就像一个默认的提供者在用户名或密码不正确的情况下显示的那样(有一个“确定”按钮)。我已经了解,如果登录失败,默认情况下,这是在ReportResult(
今天我不得不提交并将代码推入另一个代码中,但我遇到了一些麻烦。 我无能为力,那会再次带来密码输入。 我如何重置系统上的凭据,以便Git向我询问该存储库的密码? null null
我有一个普通的ASP。NET Web应用程序,我使用应用程序服务将其部署到Azure中。在部署它之后,我启用了应用程序服务身份验证并配置了Azure Active Directory。这使我能够发布我的Web应用程序,并具有身份验证,因此只有属于Active Directory的人员才能登录。 另一方面,我部署了一个ASP。NET Web API作为云服务。Web应用程序应该加载一些信息,调用We