我的问题如下:我需要我的用户能够根据他们的群组访问azure中的某些服务。
例如我们使用批量服务。我创建了一个专用于一组用户的资源组,在其中创建了一个批处理服务,并将该用户组定义为该资源组的贡献者。
如果用户登录门户,他们可以管理他们的批处理服务,只管理这个。不在该群组中的用户无法访问此资源,这很好。
现在假设我想从桌面应用程序中执行相同的操作。 首先,我需要用户获取授权使用服务的令牌:
private static string GetAuthenticationTokenWithLogin(BatchAccount account)
{
var authContext = new AuthenticationContext(account.AuthorityUri);
var authResult = authContext.AcquireTokenAsync(batchUri, account.ClientId, new Uri(account.RedirectUri), new PlatformParameters(PromptBehavior.Auto));
authResult.Wait();
return authResult.Result.AccessToken;
}
然后,用户被视为由RedirectUri定义的应用程序,并具有与此应用程序对应的授权。
如果我在azure中创建一个应用程序作为Web应用程序/ API,我可以在其上设置一个精确的用户组,但上面的登录代码不起作用。我明白了:
The request body must contain the following parameter: 'client_secret or client_assertion'
如果我将应用程序创建为Native,则上述代码可以正常工作,但我无法在应用程序上设置特定的用户组(因此我的Azure AD中的每个人都可以访问该服务)。
如何让用户使用他们自己的登录进行身份验证以及限制用户访问的可能性?
答案 0 :(得分:0)
我终于明白它是如何工作的,因为我花了很多时间挖掘,我想在这里发布答案。
起初我使用的是我在没有登录时使用的原生应用。相反,我使用应用程序密钥自动识别为应用程序。在这种情况下,我不得不添加应用程序作为我的服务的贡献者。这很好但出于安全原因并不完美(我必须与应用程序共享凭据,并且每个拥有这些凭据的用户都可以访问该服务)。在这种情况下,重要的是一切都是在应用程序标识下完成的。
当切换到用户登录时,我认为我仍然需要添加应用程序作为服务的贡献者,但事实并非如此。如上面的评论中所提到的,我无法在应用程序上指定授权用户。 相反,一旦登录,用户就会保持其身份(他们没有使用应用程序标识)。这意味着我不再需要将应用程序添加为资源的贡献者,如果没有正确IAM角色的用户尝试通过应用程序使用该服务,他将被拒绝。
总结: