我只想在遵循另一条路径(分布式应用程序或多租户网站)之前确保以下内容是不可能的。
我有一个 Web 应用插件,需要运行一些自动设置,例如在当前租户中创建新的应用注册,这反过来需要访问Microsoft图形 API,这需要使用 Directory.ReadWrite.All 等进行现有的应用注册。
我希望我可以使用我自己的租户的多租户应用注册来实现此目的。
但是,我似乎无法使用隐式授权流,因为重定向/回复 URL 是未知的(该插件交付给数百个客户,每个客户可能有很多环境)。
该插件只能使用C#和JS,但是,C#部分是"隔离的",因此无法显示(Web)表单。 ADAL 和 MSAL for .NET 都无法打开登录窗口,因为它不在用户交互模式下运行。
我已经将ADAL用于JS,但是,它似乎不支持本机客户端(非Web RedirectURI)。
我还尝试将 MSAL for JS 与 https://login.microsoftonline.com/common/oauth2/nativeclient(登录成功,但是对话框挂起,因为 JS 无法访问它,跨域请求)和 urn:ietf:wg:oauth:2.0:oob(登录后显示"打开应用程序")。我已经在IE中禁用了"保护模式"。
谢谢
>OAuth要求你有一个"已知目的地"来发送用户。如果没有这个,很容易通过劫持redirect_uri
来创建中间人攻击,使其指向恶意站点并在用户不知情的情况下捕获其令牌。
在多租户方案中使用授权代码或隐式授权时,你还希望托管它们被重定向的页面。您的站点会捕获他们需要的令牌,然后将其重定向回他们的应用程序。
此工作流的关键是在state
参数中对最终目标进行编码。您的服务器接收令牌,从state
参数解码最终指定,然后将其重定向到该位置。