使用OpenId连接Azure AD时如何将用户令牌发送到浏览器?

时间:2016-08-12 13:14:13

标签: c# owin openid-connect azure-active-directory

我正在将AzureAd与OpenId Connect连接,我可以使用我的tenantid客户端ID连接到https://login.microsoftonline.com/并使用以下配置执行身份验证

public void ConfigureAuth(IAppBuilder app)
    {
        ApplicationDbContext db = new ApplicationDbContext();

        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

        app.UseCookieAuthentication(new CookieAuthenticationOptions() {

        });

        app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = clientId,
                Authority = Authority,

                PostLogoutRedirectUri = postLogoutRedirectUri,

                Notifications = new OpenIdConnectAuthenticationNotifications()
                {
                    // If there is a code in the OpenID Connect response, redeem it for an access token and refresh token, and store those away.
                    AuthorizationCodeReceived = (context) =>
                    {
                        var code = context.Code;
                        ClientCredential credential = new ClientCredential(clientId, appKey);
                        string signedInUserID = context.AuthenticationTicket.Identity.FindFirst(ClaimTypes.NameIdentifier).Value;
                        AuthenticationContext authContext = new AuthenticationContext(Authority, new ADALTokenCache(signedInUserID));
                        AuthenticationResult result = authContext.AcquireTokenByAuthorizationCode(
                        code, new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path)), credential, graphResourceId);

                        return Task.FromResult(0);
                    }
                },

            });
    }

我的问题是从授权代码获取用户令牌后,我无法将其发送回浏览器。我需要将此令牌发送到浏览器以执行同一站点或注册到同一AD的其他站点的api调用。

我尝试设置响应和请求的cookie,但它没有用,我在Action中看不到cookie值。

是否有一种或多种方式可以利用上述样本生成的令牌。

如果任何人可以指出描述OpenId与AzureAd和单点登录连接的文章,那将是完全有用的。

提前致谢, 马赫什古普塔

1 个答案:

答案 0 :(得分:0)

查看OpenId协议规范。我已经使用 IdentityServer4 ,如果我使用隐含流,则会在响应网址设置access_tokenid_token,比如example.com/api/test#access_token=xxxxxxxx&id_token=xxxxxxxx。尝试以相同的方式追加您的API回复网址(例如,使用重定向),或将此数据作为新的Header添加到您的回复中。