2017-09-13 45 views
0

我将使用哪种Azure Active Directory认证流用于需要调用Microsoft Graph API并从Office 365应用启动器启动的单租户Web应用程序?从Office 365启动的用于Web App的Azure Active Directory流

Office 365使用的是与Web应用程序相同的租户,而我正在使用Azure AD v1端点。我试过的例子对于这种情况并不适用,因为它预计用户不能登录。

我试过了这个例子:https://github.com/microsoftgraph/aspnetcore-connect-sample

打算何时将应用程序直接,但点击在Office 365应用启动器图标就会立即显示出下面的错误它工作正常:

Exception: OpenIdConnectAuthenticationHandler: message.State is null or empty. 

是解决方案签署用户并重新验证它们以获得授权代码以缓存,还是应该使用“代表”流代替?

+0

Hi @dallasg,当我们尝试实现Azure AD v2(MSAL)身份验证端点时,我们遇到了一些依赖冲突。 netcore2.0可能会解决这个问题,因此样本将在未来几周内更新。如果您也遇到此示例的错误,请提交问题:https://github.com/microsoftgraph/aspnetcore-connect-sample/issues –

回答

0

您似乎直接为应用程序主页的URL设置了登录URL,而没有使用state参数。

要解决该问题,建议您设置应用的主页。例如,此代码示例应为https://localhost:44334。如果你想保护的Web应用程序,只允许进行身份验证的用户访问,我们可以更换的代码ConfigureServices方法像下面,并在Home控制器删除AllowAnonymous属性:

services.AddMvc(config => 
{ 
    var policy = new AuthorizationPolicyBuilder() 
        .RequireAuthenticatedUser() 
        .Build(); 
    config.Filters.Add(new AuthorizeFilter(policy)); 
}); 

之后,当您访问应用程序通过Office 365应用程序门户,它将首先重定向用户登录,然后才能访问应用程序。

+0

我尝试将_Authorize_属性添加到_HomeController_,但它仍然没有 - 验证用户。我认为是因为cookie认证中间件。 – dallasg

+0

您是否在'Home'控制器的'Index'操作中删除了'AllowAnonymous'属性? –

0

我能够通过添加Microsoft Graph URI作为OpenID Connect中间件的资源设置来解决问题。

现在,当启动应用程序时,会发送一个授权码,我可以将其存储在令牌缓存中并稍后用于对Graph API进行身份验证。