【问题标题】:How to consume or access Azure AD exposed API(MyApis)?如何使用或访问 Azure AD 公开的 API(MyApis)?
【发布时间】:2020-12-21 05:59:24
【问题描述】:

我在 AAD 中注册了我的机密客户和资源客户。 机密客户端具有访问资源客户端的 API 权限。 在我使用我的凭据从机密客户端登录后,如何向资源客户端发出请求?

基于ms docs

例如,如果您的 Web API 的应用程序 ID URI 是 https://contoso.com/api 并且您的范围名称是Employees.Read.All,那么完整的范围是: https://contoso.com/api/Employees.Read.All

这个例子还不足以让我理解访问令牌在哪里?

【问题讨论】:

    标签: azure asp.net-web-api azure-active-directory


    【解决方案1】:

    您可以使用auth code flow 获取访问令牌。

    首先,通过浏览器中的网址获取code。这一步需要登录。

    https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
    client_id={your-client-id}
    &response_type=code
    &redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
    &response_mode=query
    &scope=https://contoso.com/api/Employees.Read.All
    &state=12345
    

    然后,用代码获取access_token。

    POST  https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
    Content-Type: application/x-www-form-urlencoded
    
    client_id={your-client-id}
    &scope=https://contoso.com/api/Employees.Read.All
    &code={the code from the previous step}
    &redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
    &grant_type=authorization_code
    &client_secret={your-client-secret}
    


    关于隐式授权流程:

    此流程通常用于单页应用程序,隐式授权比其他授权存在更多风险。请检查隐式授权是否适合您的应用程序,请参阅here。如果没有,我仍然建议您使用身份验证代码流。

    注意:要让它工作,您需要先在门户的隐式授权部分下选择访问令牌,导航到应用注册 -> 您的应用程序 -> 身份验证。

    https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
    client_id={your-client-id}
    &response_type=token
    &redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
    &scope=https://contoso.com/api/Employees.Read.All
    &response_mode=fragment
    &state=12345
    &nonce=678910
    &prompt=none
    

    【讨论】:

    • 客户端凭据是否流动?我无法使用 Microsoft 登录页面获取访问令牌吗?
    • 不,这只是身份验证代码流。客户端凭据流用于应用程序,而不是用户。
    • @RonaldAbellano “使用 Microsoft 登录页面获取访问令牌”。你的意思是用浏览器调用url,然后直接获取access_token?
    • 是的。所以用户是我的 AAD 中的租户成员。我已经注册了一个机密客户端,用户可以在其中登录。而且我有一个公开的资源应用程序 API。从客户端,我将使用资源应用程序 api。有没有可能?
    • 正如我的回答所示,您需要通过第一个 URL 登录才能获取代码。然后使用此代码获取访问令牌。如果您想一步登录并获取访问令牌,您可以使用Implicit grant flow。我会在我的回复中添加它。
    猜你喜欢
    • 2016-10-06
    • 2014-08-12
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    相关资源
    最近更新 更多