2017-03-16 55 views
0

我们有一个web应用程序使用openid连接,以azure作为身份提供者来登录用户。所以用户在登录时发送到一个URL,如:admin_consent为openid连接和动态范围

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?response_type=id_token+token&client_id=3{clientId}&response_mode=form_post&redirect_uri=http://localhost:8765/ms/oidc/signon/response&scope=openid+profile+https://graph.microsoft.com/user.read&state=1234&nonce={nonce} 

这工作得很好,但需要用户同意我们的应用程序的权限作用域他们使用它的第一次。

我们想提供office365管理员同意代表他们的全部租户的能力,所以我们将其发送到端点,如:

https://login.microsoftonline.com/common/adminconsent?client_id={clientId}&state=12345&redirect_uri=http://localhost:8765 

这似乎也做工精细,并且管理员我告知他们将代表其租户中的所有用户同意。但是,用户在首次登录时仍显示同意提示。 这有一定道理,因为应用程序只与user.read许可登记的,所以如果我们不是发送用户

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?response_type=token&client_id={clientId}&response_mode=form_post&redirect_uri=http://localhost:8765/ms/oidc/signon/response&scope=https://graph.microsoft.com/user.read&state={state}&nonce={nonce} 

没有动态许可请求和响应类型只设置令牌,管理员同意作品,并且用户不会收到同意提示。 所以,我想我有两个问题:

1)这是它应该如何工作,或有某种方式授予管理员同意的配置文件和openid作用域?

2)我是否真的错过了任何不需要这些(openid + profile)权限?我不接收和响应id_token,但似乎authentication_token已经包含比id_token确实反正

回答

1

1甚至更多的信息),这是它是如何工作的,或者是有一些方法来授予管理员同意配置文件和openid范围?

似乎在蔚蓝的广告V2.0同意框架,著名的范围(OpenID的,配置文件)的错误应该是默认,当你做管理员权限授予。请参阅this link

2)我是不是缺少实际通过不要求这些(OpenID的+配置文件)的权限什么?我不接收和响应id_token,但似乎authentication_token已经包含比id_token确实反正

不要使用OpenID的,因为你还没有加入OpenID的范围内连接更多的信息,所以不会返回id_token。但是由于您拥有microsoft graph api的user.read权限,因此您可以使用microsoft graph api来读取用户的基本信息。 Id_token和访问令牌不同,id_token用于标识已认证的用户。 access_token用于证明对受保护资源的访问权限。请点击here了解更多详情。

+0

谢谢你的回答,我猜我必须等MS去修复它。 关于第2点,我明白了oauth和openid connect之间的区别,我们目前使用openid连接作用域并且获得了id_tokens,所以我的问题更接近于,如果通过使用oidc获得了任何东西在这种情况下,正如你所指出的那样,我们已经在向用户请求了。读, – vruum