支持Azure AD中的用户证书身份验证

支持Azure AD中的用户证书身份验证,azure,azure-active-directory,Azure,Azure Active Directory,我正在搜索Azure ActiveDirectory用户的基于公钥/私钥的身份验证,但在中找不到任何提示。每个用户都应该带上自己的密钥对。有什么建议可以实现吗?Azure AD支持OAuth 2.0授权第三方应用,支持OAuth 2.0使用应用的客户端凭据获取令牌 有两种方法可以获取客户端凭据流的令牌。 首先是使用Azure门户生成的密钥,如下图所示: 下面是一个关于使用密钥(client_secret)的令牌请求的图: 另一种方法是使用证书。从技术上讲,证书是一对公钥/私钥。我们将使用应用

我正在搜索Azure ActiveDirectory用户的基于公钥/私钥的身份验证,但在中找不到任何提示。每个用户都应该带上自己的密钥对。有什么建议可以实现吗?

Azure AD支持OAuth 2.0授权第三方应用,支持OAuth 2.0使用应用的客户端凭据获取令牌

有两种方法可以获取客户端凭据流的令牌。 首先是使用Azure门户生成的密钥,如下图所示:

下面是一个关于使用密钥(client_secret)的令牌请求的图:

另一种方法是使用证书。从技术上讲,证书是一对公钥/私钥。我们将使用应用程序存储公钥信息。当我们需要证明我们是第三方应用程序的所有者时,我们需要使用私钥对消息进行签名,并使用Azure AD验证使用公钥的消息

要使用应用程序存储证书信息,我们需要更改应用程序的清单。以下是使用自签名证书的详细步骤:

1.生成自签名证书:

makecert-r-pe-n“CN=MyCompanyName MyAppName证书”-b 03/15/2015-e 03/15/2017-ss my-len 2048
2.打开证书MMC管理单元并连接到您的用户帐户

3.在个人文件夹中找到新证书,并将公钥导出到base64编码文件(例如mycompanyname.cer)。您的应用程序将使用此证书与AAD通信,因此请确保您也保留对私钥的访问权

注意:您可以使用Windows PowerShell提取指纹和base64编码的公钥。其他平台提供了类似的工具来检索证书的属性

4.在Windows PowerShell提示符下,键入并运行以下命令:

$cer=新对象System.Security.Cryptography.X509Certificates.X509Certificate2
$cer.Import(“mycer.cer”)
$bin=$cer.GetRawCertData()
$base64Value=[System.Convert]::ToBase64String($bin)
$bin=$cer.GetCertHash()
$base64Thumbprint=[System.Convert]::ToBase64String($bin)
$keyid=[System.Guid]::NewGuid().ToString()
5.存储$base64Thumbprint、$base64Value和$keyid的值,以便在下一组步骤中更新应用程序清单时使用。 使用从证书提取的值和生成的密钥ID,您现在必须在Azure AD中更新应用程序清单

6.在Azure管理门户中,选择您的应用程序并在顶部菜单中选择配置

7.在命令栏中,单击管理清单并选择下载清单

8.打开下载的清单进行编辑,并用以下JSON替换empty KeyCredentials属性:

“密钥凭据”:[
{
“customKeyIdentifier”:“上面的$Base64指纹”,
“keyId”:“上面的$keyId”,
“类型”:“不对称X509Cert”,
“用法”:“验证”,
“值”:“$base64Value\u来自上面的值”
}
],
9.通过单击命令栏中的管理清单,选择加载清单,浏览更新的清单文件,然后选择它,保存更改并上载更新的清单

下图为使用证书的令牌请求示意图:

在上面的文章中,它从头开始生成client_断言。我们还可以使用ADAL库帮助我们验证守护程序应用程序:

string authority=$”https://login.microsoftonline.com/{租户}”;
var指纹=”;
X509Store store=新的X509Store(“我的”,StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certificate2Collection=(X509Certificate2Collection)store.Certificates;
X509Certificate2Collection fcollection=(X509Certificate2Collection)集合.Find(X509FindType.FindByThumbprint,指纹,false);
X509Certificate2Cert=fcollection[0];
var certCred=新客户证书(客户ID,证书);
var authContext=新的Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext(授权);
AuthenticationResult=null;
尝试
{
结果=等待authContext.AcquireTokenAsync(资源,certCred);
}
捕获(例外情况除外)
{
}
返回result.AccessToken;

如果您想使用证书授权OAuth2.0代码授权流,您还可以参考代码示例。

Azure AD支持OAuth2.0授权第三方应用,支持OAuth2.0使用应用的客户端凭据获取令牌

有两种方法可以获取客户端凭据流的令牌。 首先是使用Azure门户生成的密钥,如下图所示:

下面是一个关于使用密钥(client_secret)的令牌请求的图:

另一种方法是使用证书。从技术上讲,证书是一对公钥/私钥。我们将使用应用程序存储公钥信息。当我们需要证明我们是第三方应用程序的所有者时,我们需要使用私钥对消息进行签名,并使用Azure AD验证使用公钥的消息

要使用应用程序存储证书信息,我们需要更改应用程序的清单。以下是使用自签名证书的详细步骤:

1.生成自签名证书:

makecert-r-pe-n“CN=MyCompanyName MyAppName证书”-b 03/15/2015-e 03/15/2017-ss my-len 2048
2.打开证书MMC管理单元并连接到您的用户帐户

3.在个人文件夹中找到新证书,并将公钥导出到base64编码文件(例如mycompanyname.cer)。您的应用程序将使用此证书与AAD通信,因此请确保您也保留对私钥的访问权

注意:您可以使用Windows PowerShell提取指纹和base64编码的公钥。其他平台提供了类似的工具来检索证书的属性