Azure Active Airectory (AAD) 服务到服务身份验证
Azure Active Airectory (AAD) Service to Service Authentication
我正在构建一个 Web 应用程序,它应该能够通过 Azure AD 在 Office365 目录中创建新用户。
用户匿名进入网站,但之前(亲自交换)获得令牌代码以验证他们是否被允许访问该网站。用户输入一些联系信息(姓名、位置等)、令牌代码,当他们提交表单时,应用程序会创建新帐户。
问题:
需要在 AAD 中为 Office365 组织创建对象的身份验证和权限。我已经注册了该应用程序并在帐户级别进行了身份验证。问题是,我不确定在我使用的 MVC5 模板中从哪里开始服务到服务身份验证?
我认为通常人们会通过 Office365 图使用预共享密钥请求 Azure AD 的令牌 API,然后在后续请求中使用此令牌?
是否有人可以分享示例?
您的做法是正确的。您需要执行以下步骤:
- 在您的 AD 中,您需要为您的 Web 应用程序创建一个 "Application"(我想您已经这样做了)
- 在应用程序的 "Configure" 选项卡上,您必须将应用程序权限分配给 Windows Azure Active Directory pre-existing 应用程序,在您的情况下,您的应用程序可能需要完整的
Directory.ReadWrite.All
权限,在 Azure 门户中转换为 "Read and write directory data"
- 为您的应用程序创建一个新密钥(如果您还没有)
另请参阅:https://msdn.microsoft.com/Library/Azure/Ad/Graph/howto/azure-ad-graph-api-permission-scopes
现在您已准备好使用图表 API 执行客户端凭据流程以访问 Azure AD REST API:执行 POST
到以下端点:
https://login.microsoftonline.com/(your AD tenant ID)/oauth2/token
Content-Type: x-www-form-urlencoded
grant_type=client_credentials
&client_id=(your webapp client id)
&client_secret=(the key you just created)
&resource=https://graph.windows.net
此请求将(希望)给您一个访问令牌,使您能够与 Graph 对话 API。
我打赌您也可以使用 ADAL 或类似的 SDK 来执行此操作,但这是在后台发生的事情。
使用访问令牌作为您的 Authorization
header 内容,您现在可以按照文档 (https://msdn.microsoft.com/en-us/library/azure/ad/graph/howto/azure-ad-graph-api-operations-overview) 中的描述访问图表 API,例如像这样:
GET https://graph.windows.net/(your AD domain)/users?api-version=1.5 HTTP/1.1
Authorization: eyJ0eXAiOiJKV1QiL...
这将 return 像这样的响应:
200 OK
{
"odata.metadata": "https://graph.windows.net/(your domain ID)/$metadata#directoryObjects/Microsoft.DirectoryServices.User",
"value": [
{
"odata.type": "Microsoft.DirectoryServices.User",
"objectType": "User",
"objectId": "(some GUID)",
"deletionTimestamp": null,
"accountEnabled": true,
....
发布到 /users?api-version=1.5
端点将为您创建用户。
我正在构建一个 Web 应用程序,它应该能够通过 Azure AD 在 Office365 目录中创建新用户。
用户匿名进入网站,但之前(亲自交换)获得令牌代码以验证他们是否被允许访问该网站。用户输入一些联系信息(姓名、位置等)、令牌代码,当他们提交表单时,应用程序会创建新帐户。
问题: 需要在 AAD 中为 Office365 组织创建对象的身份验证和权限。我已经注册了该应用程序并在帐户级别进行了身份验证。问题是,我不确定在我使用的 MVC5 模板中从哪里开始服务到服务身份验证?
我认为通常人们会通过 Office365 图使用预共享密钥请求 Azure AD 的令牌 API,然后在后续请求中使用此令牌?
是否有人可以分享示例?
您的做法是正确的。您需要执行以下步骤:
- 在您的 AD 中,您需要为您的 Web 应用程序创建一个 "Application"(我想您已经这样做了)
- 在应用程序的 "Configure" 选项卡上,您必须将应用程序权限分配给 Windows Azure Active Directory pre-existing 应用程序,在您的情况下,您的应用程序可能需要完整的
Directory.ReadWrite.All
权限,在 Azure 门户中转换为 "Read and write directory data" - 为您的应用程序创建一个新密钥(如果您还没有)
另请参阅:https://msdn.microsoft.com/Library/Azure/Ad/Graph/howto/azure-ad-graph-api-permission-scopes
现在您已准备好使用图表 API 执行客户端凭据流程以访问 Azure AD REST API:执行 POST
到以下端点:
https://login.microsoftonline.com/(your AD tenant ID)/oauth2/token
Content-Type: x-www-form-urlencoded
grant_type=client_credentials
&client_id=(your webapp client id)
&client_secret=(the key you just created)
&resource=https://graph.windows.net
此请求将(希望)给您一个访问令牌,使您能够与 Graph 对话 API。
我打赌您也可以使用 ADAL 或类似的 SDK 来执行此操作,但这是在后台发生的事情。
使用访问令牌作为您的 Authorization
header 内容,您现在可以按照文档 (https://msdn.microsoft.com/en-us/library/azure/ad/graph/howto/azure-ad-graph-api-operations-overview) 中的描述访问图表 API,例如像这样:
GET https://graph.windows.net/(your AD domain)/users?api-version=1.5 HTTP/1.1
Authorization: eyJ0eXAiOiJKV1QiL...
这将 return 像这样的响应:
200 OK
{
"odata.metadata": "https://graph.windows.net/(your domain ID)/$metadata#directoryObjects/Microsoft.DirectoryServices.User",
"value": [
{
"odata.type": "Microsoft.DirectoryServices.User",
"objectType": "User",
"objectId": "(some GUID)",
"deletionTimestamp": null,
"accountEnabled": true,
....
发布到 /users?api-version=1.5
端点将为您创建用户。