我们遇到以下情况:
外部网络
内部网络:
我想根据官方的Microsoft文档(first bullet point)保护内部api。但是要实现此目的,我们需要使用活动目录对客户端进行身份验证。
由于调用我们api的客户端是另一个应用程序(不是用户),因此我们需要根据OAuth2使用客户端凭据流。然后,身份提供者必须向我提供一个包含自定义范围的令牌(另一方可以检查)
不幸的是,在阅读了大量有关如何使用Azure AD的文档之后,我无法检索包含自定义范围的JWT令牌。
我已经尝试在活动目录刀片中注册应用程序:
在其设置页面上,我尝试注册权限(这似乎是AD领域的范围),但仅显示了官方的Microsoft API。
如何添加外部api的权限?
使用应用程序密钥创建的令牌也不包含“ scp”或“范围”声明。如何将范围声明纳入令牌?
我在AD B2C Blade中为我的api( our-api )注册了一个应用程序:
对于我在AD Blade中注册了应用程序的客户端( TestClient 1 和 TestClient 2 ):
TestClient 1 需要我的“ our-api”应用程序的权限:
TestClient 2 不需要任何许可:
当我尝试使用 TestClient 1 登录到AD时,得到了预期的access_token。但是,如果尝试以 TestClient 2 身份登录,我也会获得一个access_token。这个过程不应该失败吗?如何验证只有 TestClient 1 具有该权限?
答案 0 :(得分:1)
如何验证只有TestClient 1拥有此权限?
您可以在jwt.io中解析令牌,可以检查令牌的权限。
当我尝试使用TestClient 1登录到AD时,得到了预期的access_token。但是,如果我尝试以TestClient 2身份登录,我也会获得一个access_token。
首先,即使您尚未将其添加到应用程序的Requried权限中,也可以使用任何应用程序获取可以在应用程序的Requried权限中找到的任何API的access_token,但是您无法使用此access_token来访问API的资源,因为令牌没有权限。如前所述,您创建了自己的API,因此该API没有应用程序权限。而且在客户端凭据流中,它不是代表用户的,因此只有应用程序权限才在此流中起作用,并且两个测试应用程序的令牌都将没有权限。