首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Outlook-addin中代表流通过MFA / auth

如何在Outlook-addin中代表流通过MFA / auth
EN

Stack Overflow用户
提问于 2022-07-02 14:43:34
回答 1查看 197关注 0票数 0

我们正在outlook添加中实现SSO。让我们假设,这里有两个简单的租户。

房客Tenant

  • Customer

我们增加了客户租户的用户作为客人在家庭租户。因此,我们可以管理具有一定可访问性的来宾用户。

我们已经创建了多租户应用程序注册在家庭租户,以获得用户同意和认证客户租户。我们已经将应用程序(客户端) id和应用程序id uri放在Outlook中,如下所示。

代码语言:javascript
复制
</OfficeApp>
    ...
    ...
    <WebApplicationInfo>
      <Id>928cd908-multi-tenant-application-id</Id>
      <Resource>api://company-domain.com/928cd908-multi-tenant-application-id</Resource>
      <Scopes>
        <Scope>Files.Read.All</Scope>
        <Scope>offline_access</Scope>
        <Scope>openid</Scope>
        <Scope>profile</Scope>
      </Scopes>
    </WebApplicationInfo>
    </VersionOverrides>
  </VersionOverrides>
</OfficeApp>

我们假设之前已经同意了,

为了做SSO,我遵循以下步骤,

客户Tenant.

  • Passing客户租户令牌通过api call.

  • Exchanging Customer通过api call.

  • Exchanging客户端到家庭租户AD令牌通过OBO请求发出的
  1. 执行OfficeJs.auth.getAccessToken和获取访问令牌。

代码语言:javascript
复制
POST /2e627697-home-tenant-ad-id/oauth2/v2.0/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
&client_id=928cd908-multi-tenant-application-id
&client_secret=.m_7Qxxx
&assertion=eyJ0eXAiOiJKV1Q-customer-tenant-ad-token
&requested_token_use=on_behalf_of
&scope=api://company-domain.com/928cd908-multi-tenant-application-id/access_as_user openid

由于客户租户的用户以guest.

  • Allowing用户的身份存在于家庭租户AD中,因此
  1. 从服务器获得了对Outlook的服务器resource.
  2. Send响应。

到目前为止,问题是,

如果我为来宾用户启用了每个用户的MFA,那么当我代表服务器.执行请求时,就会出现以下错误。

代码语言:javascript
复制
{
    "error": "invalid_grant",
    "error_description": "AADSTS50076: Due to a configuration change made by your administrator, or because you moved to a new location, you must use multi-factor authentication to access '928cd908-multi-tenant-application-id'.\r\nTrace ID: 706875e8-bfe7-44b8-a9f9-402b1f4a2201\r\nCorrelation ID: 8a4bde4c-9222-4aa0-a4d6-cd0748ff3816\r\nTimestamp: 2022-06-29 18:00:31Z",
    "error_codes": [
        50076
    ],
    "timestamp": "2022-06-29 18:00:31Z",
    "trace_id": "706875e8-bfe7-44b8-a9f9-402b1f4a2201",
    "correlation_id": "8a4bde4c-9222-4aa0-a4d6-cd0748ff3816",
    "error_uri": "https://login.microsoftonline.com/error?code=50076",
    "suberror": "basic_action"
}

有两个选项可以进行用户交互,

备选案文1

通过代表服务器请求将Officejs.auth.getAccessToken.

  • Send客户租户令牌调用到server.

  • Create,
  1. 获取客户租户令牌。
  2. 获得50076错误,然后发送错误响应到加载项。
  3. 通过使用下面的url从外接程序中授权MFA的弹出。这将使MFA对抗Home .

代码语言:javascript
复制
const authorizeUrl = 
`https://login.microsoftonline.com/2e627697-home-tenant-ad-id/oauth2/v2.0/authorize?client_id=928cd908-multi-tenant-application-id
&response_type=id_token+token
&redirect_uri=https://company-domain.com/928cd908-multi-tenant-application-id
&scope=openid api://company-domain.com/928cd908-multi-tenant-application-id/access_as_user
&response_mode=fragment
&state=12345
&nonce=678910`

window.open(authorizeUrl)

在MFA completed.

  • Call Officejs.auth.getAccessToken之后,
  1. 关闭授权弹出以获取客户租户令牌(2e627697- Home - Passed).
  2. Pass - AD -id MFA Passed).
  3. Pass客户租户令牌和MFA代表server.
  4. Create -代表客户租户令牌的服务器请求(2e627697-Home-承租-AD-id MFA通过)。

备选案文2

Officejs.auth.getAccessToken.

  • Send

  • 通过代表服务器向server.

  • Create调用客户租户令牌来获取客户租户令牌。

  • 获得50076错误,然后将错误响应发送到加载项。

  • 调用Officejs.auth.getAccessToken以获得客户租户令牌(MFA已通过)。在这里,我不清楚如何强制OfficeJ在传递2e627697-home-tenant-ad-id.

的MFA后获得客户租户令牌

问题

  1. 选项1是通过Outlook代码通过window.open获得MFA,而不是通过OfficeJs获得MFA。这是正确的方法吗?如果选项2是正确的,我如何强制OfficeJs执行2e627697-home-tenant-ad-id?

EN

回答 1

Stack Overflow用户

发布于 2022-07-26 01:35:44

为了确保MFA得到满足,使用MS图返回的消息作为Office.AuthOptions.authChallenge值。例如。

代码语言:javascript
复制
let exchangeResponse = await getGraphToken(bootstrapToken);
await Officejs.auth.getAccessToken({
   authChallenge: exchangeResponse.claims
});
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72839954

复制
相关文章

相似问题

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