通过Bot使用Azure AD B2C

时间:2018-07-26 07:48:15

标签: .net azure botframework bots azure-ad-b2c

我已经在Azure中创建了一个机器人,该机器人使用SignInCard为用户提供了登录或注册为客户的选项。 这是我目前拥有的SignInCard

messageActivity.Attachments.Add(new SigninCard()
            {
                Buttons = new List<CardAction>()
                {
                    new CardAction()
                    {
                        Title = "Log in here",
                        DisplayText = "Log in here",
                        Value = "https://login.microsoftonline.com/XXXXXXXX.onmicrosoft.com/oauth2/v2.0/authorize?p=B2C_1_SiUp&client_id=XXXXX-XXXX-XXXX-XXXX-XXXXXXXd&nonce=defaultNonce&redirect_uri=http%3A%2F%2Flocalhost%3A3980%2Fapi%2Flogin&scope=openid&response_type=id_token&prompt=login",
                        Text = "Sign in/Register",
                        Type = ActionTypes.Signin,                        
                    }
                }                
            }.ToAttachment());

机器人会正确显示卡,当我单击它时,它会使用正确的提供程序打开浏览器,并且运行良好(我可以登录并注册)。

最后,我有一个Web API,其中一个LoginController映射到我的返回网址(即localhost:3980 / api / login)。

要验证是否正在调用Return Url,我在LoginControl.Get中放置了一个断点:

public class LoginController : ApiController
{
    [HttpGet]
    public IHttpActionResult Get()
    {
        return Ok();     //The breakpoint here is hit!
    }
}

登录后,将在遇到断点时调用Get方法,但是...接下来是什么?我不知道从现在开始该怎么做。

我发现的唯一想法是,Azure B2C AD正在使用以下URL调用LoginController.Get方法:

http://localhost:3980/api/login#id_token=eyJ0eXAi ...

我猜想是该URL,因为它显示在我的浏览器的地址栏中。

因此,它发送的是“ id_token”,但是在Controller.Get方法内部,我似乎无法访问它:(

什么是id_token?如何获得?

你能告诉我如何继续吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

AuthBotBotAuth是包含身份验证实现方法的示例。

您必须使用Graph Api来使用从身份验证器服务(更特定于Azure Active Directory)接收的令牌来获取用户原理。令牌将收到您在AAD应用程序中配置的回叫网址。

在示例中,您将获得用户身份验证的完整实现。

希望这会对您有所帮助。