相关疑难解决方法(0)

配置授权服务器端点

我们如何使用用户名和密码流在ASP.NET 5中使用持票令牌?对于我们的场景,我们希望让用户使用AJAX调用进行注册和登录,而无需使用外部登录.

为此,我们需要一个授权服务器端点.在以前的ASP.NET版本中,我们将执行以下操作,然后在ourdomain.com/TokenURL上登录.

// Configure the application for OAuth based flow
PublicClientId = "self";
OAuthOptions = new OAuthAuthorizationServerOptions
{
    TokenEndpointPath = new PathString("/Token"),
    Provider = new ApplicationOAuthProvider(PublicClientId),
    AccessTokenExpireTimeSpan = TimeSpan.FromDays(14)
};
Run Code Online (Sandbox Code Playgroud)

但是,在当前版本的ASP.NET中,上述操作无效.我们一直试图找出新的方法.例如,GitHub上的aspnet/identity示例配置了Facebook,Google和Twitter身份验证,但似乎没有配置非外部OAuth授权服务器端点,除非这样AddDefaultTokenProviders()做,在这种情况下我们想知道到底是什么URL提供者会.

研究

我们从阅读源代码中了解到,我们可以通过调用IAppBuilder.UseOAuthBearerAuthentication我们的Startup类来向HTTP管道添加"承载认证中间件" .虽然我们仍然不确定如何设置其令牌端点,但这是一个良好的开端.这不起作用:

public void Configure(IApplicationBuilder app)
{  
    app.UseOAuthBearerAuthentication(options =>
    {
        options.MetadataAddress = "meta";
    });

    // if this isn't here, we just get a 404
    app.Run(async context =>
    {
        await context.Response.WriteAsync("Hello …
Run Code Online (Sandbox Code Playgroud)

c# asp.net oauth asp.net-identity asp.net-core

39
推荐指数
2
解决办法
3万
查看次数

OWIN/OAuth2第三方登录:来自客户端应用程序的身份验证,来自Web API的授权

我正在尝试创建一个Web API,允许API的客户端(本机移动应用程序)使用第三方云存储提供程序登录.我正在使用Microsoft的以下一般流程:

这是我想要实现的目标:

我使用带有外部身份验证的默认ASP.NET Web API Visual Studio模板,以及用于Dropbox登录功能的OWin.Security.Providers Nuget包,以及用于Google(Drive)和Microsoft(OneDrive)的现有内置登录功能.

我遇到的问题是,内置功能似乎都是作为一个流程的一部分进行身份验证和授权.例如,如果我在Startup.Auth.cs中设置以下内容:

DropboxAuthenticationOptions dropboxAuthOptions = new DropboxAuthenticationOptions
                                                    {
                                                        AppKey = _dropboxAppKey,
                                                        AppSecret = _dropboxAppSecret
                                                    };
app.UseDropboxAuthentication(dropboxAuthOptions);
Run Code Online (Sandbox Code Playgroud)

...并从我的网络浏览器导航到此网址:

http://<api_base_url>/api/Account/ExternalLogin?provider=Dropbox&response_type=token&client_id=self&redirect_uri=<api_base_url>
Run Code Online (Sandbox Code Playgroud)

我已成功重定向到Dropbox登录:

https://www.dropbox.com/1/oauth2/authorize?response_type=code&client_id=<id>&redirect_uri=<redirect_uri>
Run Code Online (Sandbox Code Playgroud)

...然后在我授予访问权限后,重定向回到:

http://<api_base_url>/Help#access_token=<access_token>&token_type=bearer&expires_in=1209600
Run Code Online (Sandbox Code Playgroud)

...因为你可以看到令牌是其中的一部分,所以可以提取.问题是客户端需要导航到Dropbox并将授权代码返回到Web API,Web API会将授权代码发送回第三方以获取令牌,然后将其返回给客户......如上图所示.我需要AccountController中的ExternalLogin操作以某种方式检索Dropbox url并将其返回给客户端(它只是一个json响应),但我没有看到一种方法来检索它(它只返回一个ChallengeResult,并且实际的Dropbox网址埋在某处).此外,我认为我需要一种方法来根据授权代码单独请求来自第三方的令牌.

这篇文章似乎与我想要做的有点类似:

使用OWIN标识从多个API客户端注册Web API 2外部登录

...但是那里的解决方案似乎要求客户端成为MVC应用程序,对我来说不一定是这样.我希望在客户端保持尽可能简单,遵循上图中的流程,但也不要重新发明轮子(尽可能多地重用OWIN/OAuth2实现中已存在的内容).理想情况下,我不希望客户端必须引用任何OWIN/OAuth库,因为我真正需要客户端做的就是访问API提供的外部URL(在我的示例中为Dropbox),让用户输入他们的凭据并授予权限,并将生成的授权代码发送回api.

从概念上讲,这听起来并不难,但我不知道如何实现它,仍然尽可能多地使用现有的OAuth代码.请帮忙!

authentication oauth oauth-2.0 asp.net-web-api owin

12
推荐指数
1
解决办法
8376
查看次数

没有配置身份验证处理程序来验证该方案:Microsoft.AspNet.Identity.External

我正在使用asp.net 5 rc2构建一个api.我正在尝试实现openiddict-core,在这里找到本地帐户,我也想让用户使用外部登录,例如谷歌.

我已经设置了所有,但当我尝试实施谷歌身份验证,我称之为代码

var info = await _signInManager.GetExternalLoginInfoAsync();

我在标题中收到错误消息.

在客户端,我使用Satellizer发现在这里,这需要打开谷歌提示窗口的关怀和发送回调到我的AuthController谷歌的方法,这是你看到正常的ChallengeResult代码在其他mvc6例子.

我已经编写了代码来手动获取用户详细信息,但是我认为我会使用已经构建的signInManager,而不是重现轮...

我可能没有正确设置,因为所有示例似乎都使用cookie,我猜测是因为它们是mvc6 Web应用程序,而不是api.我不想使用cookies,但这可能是我的问题.

现在为一些代码.

startup.cs

public void ConfigureServices(IServiceCollection services)
{
    // Add MVC services to the services container.
    services.AddMvc();

    services.AddEntityFramework()
        .AddSqlServer()
        .AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(_configuration["Data:DefaultConnection:ConnectionString"]));

    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders()
        .AddOpenIddict(); // Add the OpenIddict services after registering the Identity services.
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    // use jwt bearer authentication
    app.UseJwtBearerAuthentication(options =>
    {
        options.AutomaticAuthenticate = true;
        options.AutomaticChallenge = true;
        options.RequireHttpsMetadata = …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net authentication asp.net-core

5
推荐指数
1
解决办法
9283
查看次数