Identityserver3在隐式流中获得accessstoken

时间:2017-03-08 14:37:49

标签: asp.net-mvc asp.net-web-api2 access-token identityserver3

我们有一个带有impicit流的MVC客户端和CookieAuthentication。现在我们想从javascript调用另一个api(相同的STS),所以我们需要一个accessstoken。

问题:我们如何获得accessstoken。这是我们的mvc客户端设置:

app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = "Cookies",
            CookieName = "AuthCookieCoolApp",

        });

        app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
        {
            Authority = ConfigurationManager.AppSettings["Authority"],
            ClientId = "CoolApp",
            RedirectUri = ConfigurationManager.AppSettings["RedirectUri"],
            ResponseType = "id_token token", // added token here
            SignInAsAuthenticationType = "Cookies",
            Scope = "cool_profile openid profile",
        }

使用fiddler,我们看到来自Identityserver的accesstoken已经发布回redirceturi,但我们怎么能抓住呢?我们在Notifications上找到了OpenIdConnectAuthenticationOptions属性,但这一事件似乎都不合适。

奖金问题:当我们在服务器(mvc)上获得accessstoken时,是否有将其发送到浏览器的最佳方式?将它存储在服务器上,并在每个可能需要调用新api的页面上发送,或者在需要时从javascript请求它?

感谢您提供任何指导

Larsi

1 个答案:

答案 0 :(得分:1)

您可以从协议消息中获取访问令牌,如:

Notifications = new OpenIdConnectAuthenticationNotifications
            {
                MessageReceived = notification =>
                {
                    var message = notification.ProtocolMessage;
                    var accesstoken = message.AccessToken;
                    return Task.FromResult(0);
                }
            }