首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure REST安全性

Azure REST安全性
EN

Stack Overflow用户
提问于 2018-05-23 14:24:04
回答 1查看 606关注 0票数 0

我正在为API管理服务中的特定API搜索类似于AAD、用户智能角色/策略的特性。

AWS提供基于规则的访问控制。例如,我们可以使用角色/策略为特定的IAM用户分配特定的api ( API网关)访问。

Azure提供这样的服务吗?例如,我在Azure API管理服务中添加了20个API (5 GET +5 POST +5 PUT +5 DELETE)。我可以指定特定的方法(例如。获取)对特定用户的api访问?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-23 21:25:03

要做到这一点(没有代码,只需要配置),一个选择是使用Azure Active Directory (AAD)应用程序角色。

首先,您需要创建一个表示Web的AAD应用程序。转到AAD > App注册,并在那里注册一个Web / Web。然后编辑其清单以添加角色,即:

代码语言:javascript
复制
  "appRoles": [
    {
      "allowedMemberTypes": [
        "Application",
        "User"
      ],
      "displayName": "Allow HTTP GET",
      "id": "9cc5ee71-3d7d-4060-8b7f-e734f3917e71",
      "isEnabled": true,
      "description": "Allow HTTP GET requests",
      "value": "AllowGET"
    }
  ],

您可以为API的不同方法添加不同的角色。

然后转到AAD >,找到您刚刚创建的应用程序,并且:

  • Properties中,选择“用户分配所需”> Yes
  • 用户和组中,添加要允许访问之前创建的角色(“允许HTTP”)的用户。

现在转到API管理服务> APIs >查找您的API / Method并编辑入站处理。在代码视图下,添加一个ValidateJWT策略来验证AAD令牌(确保配置您的AAD租户名称并配置用户GUID,这是您的Web的应用程序ID (您在AAD开始注册的应用程序ID):

代码语言:javascript
复制
<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
    <openid-config url="https://login.microsoftonline.com/TENANT.onmicrosoft.com/.well-known/openid-configuration" />
    <audiences>
        <audience>53a81160-e4c9-40ba-aeef-6bb99ad6b4b3</audience>
    </audiences>
    <required-claims>
        <claim name="roles" match="all">
            <value>AllowGET</value>
        </claim>
    </required-claims>
</validate-jwt>

注意,在required-claims下是您之前在应用程序清单中配置的角色声明(AllowGET)。

现在你可以测试了。如果您想通过APIM控制台进行测试,那么您应该按照这里的说明进行使用OAuth 2.0与Azure Active和API管理一起保护API

或者,您也可以使用简单的PowerShell脚本进行测试,如下所示。如果使用此脚本,首先需要注册另一个AAD应用程序,这一次代表脚本(“本机客户端”)。转到AAD > App注册并注册一个本地客户端。在“设置”>“权限”下,添加委托权限,以便此应用程序可以调用Web API:

"Microsoft.IdentityModel.Clients.ActiveDirectory.dll“脚本:(检查代码并确保替换API的参数和URL,并向ADAL库”Microsoft.IdentityModel.Clients.ActiveDirectory.dll“添加路径,这是用来简化令牌获取的)

代码语言:javascript
复制
add-type -path "Microsoft.IdentityModel.Clients.ActiveDirectory.dll"
$clientId = "NATIVE APPLICATION AAD AAP ID"
$redirectUri = "http://NATIVE APPLICATION AAD REDIRECT URI"
$resourceAppIdURI = "WEB API APP ID"
$authority = "https://login.windows.net/TENANT.onmicrosoft.com"
$authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authority,$false
$promptBehavior=new-object Microsoft.IdentityModel.Clients.ActiveDirectory.PlatformParameters([Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior]::Always)
$userId = [Microsoft.IdentityModel.Clients.ActiveDirectory.UserIdentifier]::AnyUser
$authResult = $authContext.AcquireTokenAsync($resourceAppIdURI, $clientId, $redirectUri, $promptBehavior, $userId, $extraQueryParameters)
$authHeader = @{
'Accept'='application/json'
'Content-Type'='application/json'
'Authorization'=$authResult.result.CreateAuthorizationHeader()
'Ocp-Apim-Subscription-Key'='APIM SUBSCRIPTION KEY'
'Ocp-Apim-Trace'='true'
}
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-RestMethod -Uri "https://yourapimanager.azure-api.net/posts" -Headers $authHeader -Method Get -Verbose
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50490897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档