使用客户端机密Azure请求访问令牌

使用客户端机密Azure请求访问令牌,azure,azure-active-directory,adal,Azure,Azure Active Directory,Adal,我有两个API:A和B。它们都作为API在Azure AD中注册。在azure中,我生成了B的密钥 现在我需要生成一个访问令牌,所以我使用ADAL库来访问Java。我尝试使用这种方法: public Future<AuthenticationResult> acquireToken(final String resource, final UserAssertion userAssertion, final ClientCredential credentia

我有两个API:A和B。它们都作为API在Azure AD中注册。在azure中,我生成了B的密钥

现在我需要生成一个访问令牌,所以我使用ADAL库来访问Java。我尝试使用这种方法:

public Future<AuthenticationResult> acquireToken(final String resource,
            final UserAssertion userAssertion, final ClientCredential credential,
            final AuthenticationCallback callback)
公共未来获取令牌(最终字符串资源,
最终用户断言用户断言,最终客户端凭据凭据,
最终身份验证(回调)
我有ClientCredital信息,但我没有UserAssion,我不知道如何生成它。有人能帮忙吗

这是我的电话:

Future<AuthenticationResult> future = context.acquireToken("http://localhost:8081",SHOULD_BE_ASSERTION,
                    new ClientCredential(CLIENT_ID,SECRET),null);
Future=context.acquireToken(“http://localhost:8081“,应该是断言,
新客户端凭据(客户端ID,机密),空;

这实际上取决于您想要实现的OAuth流

在您的情况下,从您的问题的上下文来看,最简单的方法是
客户端凭据
flow(),无需用户交互。对于该流,您需要一个特定的重载,namley:

Future,由客户端id和客户端密码组成

不同的OAuth流需要
用户断言
代表
(已描述)。只有当您拥有最终用户上下文时,这才是可能的。这将是Web Api A的访问令牌


请花点时间阅读文档并了解不同的流程。然后您还将了解库和SDK。

这实际上取决于您试图实现的OAuth流的具体内容

在您的情况下,从您的问题的上下文来看,最简单的方法是
客户端凭据
flow(),无需用户交互。对于该流,您需要一个特定的重载,namley:

Future,由客户端id和客户端密码组成

不同的OAuth流需要
用户断言
代表
(已描述)。只有当您拥有最终用户上下文时,这才是可能的。这将是Web Api A的访问令牌


请花点时间阅读文档并了解不同的流程。然后,您还将了解库和SDK。

您希望以用户身份调用API还是以API本身的身份调用API?例如,如果API A是由具有委派权限的客户端调用的,则API A可以代表为B获取另一个用户令牌。如果不是,则需要使用acquireToken的另一个重载来获取具有客户端凭据的令牌。我希望以API而非用户的身份调用API。您希望以用户或API本身的身份调用API吗?例如,如果API A由具有委托权限的客户端调用,则API A可以代表为B获取另一个用户令牌。如果不是,然后,您需要使用acquireToken的另一个重载来获取具有客户端凭据的令牌。我想以API而不是用户的身份调用API。我尝试在没有USerAssertion的情况下使用您的方法acquireToken,但得到了:“错误描述”:“AADSTS50059:在请求中或任何提供的证书中均未找到租户标识信息。那么,您必须仔细阅读文档,并在Azure AD中配置您以及您的应用程序。
资源
参数应为Api B的应用程序ID URI。是的,从评论中可以看出,您确实需要客户端凭据流:)因此,我使用您的方法获得了访问令牌,但现在我需要将此令牌传输到API A,此API A需要验证此令牌。有什么建议吗?应该验证
访问\u令牌的唯一API是为其颁发令牌的API!如果您有API B的访问令牌,那么只有B会验证该令牌。所有其他方(如API A)应将
访问令牌
视为一个字符串。此外,这是另一个问题。请您接受答案,因为它显然为您带来了您想要的解决方案。我尝试使用您的方法acquireToken而不使用USerAssertion,但我得到了:“错误描述”:“AADSTS50059:在请求中或任何提供的证书中均未找到租户标识信息。那么,您必须仔细阅读文档,并在Azure AD中配置您以及您的应用程序。
资源
参数应为Api B的应用程序ID URI。是的,从评论中可以看出,您确实需要客户端凭据流:)因此,我使用您的方法获得了访问令牌,但现在我需要将此令牌传输到API A,此API A需要验证此令牌。有什么建议吗?应该验证
访问\u令牌的唯一API是为其颁发令牌的API!如果您有API B的访问令牌,那么只有B会验证该令牌。所有其他方(如API A)应将
访问令牌
视为一个字符串。此外,这是另一个问题。你愿意接受这个答案吗?因为它显然为你带来了你所要求的解决方案。
Future<AuthenticationResult>    acquireToken(String resource, ClientCredential credential, AuthenticationCallback callback)