如何将承载令牌转换为MVC应用程序的身份验证Cookie

K0D4

我有一个三层的应用程序结构。有一个针对最终用户的cordova js应用程序,一个充当OpenID授权机构的identityserver3的实现以及一个可以通过cordova应用程序中的应用程序内浏览器访问的MVC应用程序。

用户的起始入口是cordova应用程序。他们通过应用程序内浏览器登录那里,然后可以访问应用程序功能或单击链接以打开应用程序内浏览器并访问MVC应用程序。

我们保护MVC网站的策略是使用承载令牌身份验证,因为我们已经从应用程序登录一次,并且不希望在将用户定向到MVC应用程序时提示用户再次登录:

app.Map("/account", account =>
{
    account.UseIdentityServerBearerTokenAuthentication(new IdentityServer3.AccessTokenValidation.IdentityServerBearerTokenAuthenticationOptions()
    {
        Authority = "https://localhost:44333/core",
        RequiredScopes = new string[] { "scope" },
        DelayLoadMetadata = true,
        TokenProvider = new QueryStringOAuthBearerProvider(),
        ValidationMode = ValidationMode.ValidationEndpoint, 
    });
}

由于将access_token持久保留在查询字符串上很麻烦,因此我实现了一个自定义OAuthBearerAuthenticationProvider:

public class QueryStringOAuthBearerProvider : OAuthBearerAuthenticationProvider
{
    private static ILog logger = LogManager.GetLogger(typeof(QueryStringOAuthBearerProvider));
    public override Task RequestToken(OAuthRequestTokenContext context)
    {
        logger.Debug($"Searching for query-string bearer token for authorization on request {context.Request.Path}");

        string value = GetAccessTokenFromQueryString(context.Request);

        if (!string.IsNullOrEmpty(value))
        {
            context.Token = value;
            //Save the token as a cookie so the URLs doesn't need to continue passing the access_token
            SaveAccessTokenToCookie(context.Request, context.Response, value);
        }
        else
        {
            //Check for the cookie
            value = GetAccessTokenFromCookie(context.Request);
            if (!string.IsNullOrEmpty(value))
            {
                context.Token = value;
            }
        }

        return Task.FromResult<object>(null);
    }
    [cookie access methods not very interesting]
}

这可以正常工作,并且允许MVC应用程序不必将访问令牌持久存储在每个请求中,但是将访问令牌存储为仅通用cookie似乎是错误的。

我真正想做的是使用访问令牌与OpenID端点一起使用,并发出一个Forms-Auth样式cookie,该cookie响应注销。我发现可以添加,account.UseOpenIdConnectAuthentication(..)但是如果我通过access_token进行身份验证,则会跳过OpenIdConnectAuthentication位。有任何想法吗?

布罗克·艾伦

您不需要-访问令牌旨在用于调用Web API。您可以使用OIDC的id_token对用户进行身份验证,并根据内部声明发出本地身份验证cookie。Microsoft OpenIdConnect身份验证中间件将为您完成大部分繁重的工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MVC应用程序和WebAPI子应用程序的身份验证

来自分类Dev

如何查询经过身份验证的Django应用程序?

来自分类Dev

在同一MVC应用程序中同时使用OWIN Cookie身份验证和Windows身份验证

来自分类Dev

承载和Cookie身份验证

来自分类Dev

处理OAuth 2.0身份验证-在ASP.NET MVC应用程序中获取令牌重定向令牌响应

来自分类Dev

将Cookie身份验证会话转换为令牌安全吗?

来自分类Dev

如何使用AngularJS在浏览器cookie中存储身份验证承载令牌

来自分类Dev

从类库到mvc5应用程序的基于令牌的身份验证

来自分类Dev

如何将承载令牌转换为MVC应用程序的身份验证Cookie

来自分类Dev

如何在IIS上发布具有表单身份验证的MVC应用程序

来自分类Dev

PHP-将RBAC和身份验证放在MVC应用程序中的哪里?

来自分类Dev

如何将本地用户转换为针对LDAP目录进行身份验证?

来自分类Dev

同一应用程序上的AAD OpenId和承载身份验证

来自分类Dev

SSH身份验证后,将FileZilla(或OSX应用程序)转换为SFTP

来自分类Dev

如何将OAuth2身份验证令牌从MVC5 wep应用程序传递到WebAPI2应用程序

来自分类Dev

如何查询经过身份验证的Django应用程序?

来自分类Dev

如何将基于声明的身份验证应用于.NET 4应用程序?

来自分类Dev

如何将身份验证从LDAP更改为JDBC以保护我的应用程序

来自分类Dev

如何将Web应用程序转换为本地Chrome应用程序

来自分类Dev

如何将ASP.NET MVC Web应用程序的标识/身份验证部分移到类库中?

来自分类Dev

Jhipster缺少身份验证承载令牌

来自分类Dev

如何将AngularJS应用程序转换为android应用程序

来自分类Dev

如何将ios应用程序转换为Xamarin.ios应用程序?

来自分类Dev

如何与Windows服务应用程序共享MVC 5 Identity 2.0身份验证(esp SignInManager)?

来自分类Dev

Node js:如何将授权和身份验证集成到我的节点应用程序中?

来自分类Dev

如何将本地用户转换为针对 LDAP 目录进行身份验证?

来自分类Dev

如何将 Django 应用程序转换为 RoR?

来自分类Dev

如何在 OWIN 应用程序中使用 cookie 身份验证和 WsFederation 身份验证

来自分类Dev

如何将 Laravel Web 应用程序转换为移动应用程序

Related 相关文章

  1. 1

    MVC应用程序和WebAPI子应用程序的身份验证

  2. 2

    如何查询经过身份验证的Django应用程序?

  3. 3

    在同一MVC应用程序中同时使用OWIN Cookie身份验证和Windows身份验证

  4. 4

    承载和Cookie身份验证

  5. 5

    处理OAuth 2.0身份验证-在ASP.NET MVC应用程序中获取令牌重定向令牌响应

  6. 6

    将Cookie身份验证会话转换为令牌安全吗?

  7. 7

    如何使用AngularJS在浏览器cookie中存储身份验证承载令牌

  8. 8

    从类库到mvc5应用程序的基于令牌的身份验证

  9. 9

    如何将承载令牌转换为MVC应用程序的身份验证Cookie

  10. 10

    如何在IIS上发布具有表单身份验证的MVC应用程序

  11. 11

    PHP-将RBAC和身份验证放在MVC应用程序中的哪里?

  12. 12

    如何将本地用户转换为针对LDAP目录进行身份验证?

  13. 13

    同一应用程序上的AAD OpenId和承载身份验证

  14. 14

    SSH身份验证后,将FileZilla(或OSX应用程序)转换为SFTP

  15. 15

    如何将OAuth2身份验证令牌从MVC5 wep应用程序传递到WebAPI2应用程序

  16. 16

    如何查询经过身份验证的Django应用程序?

  17. 17

    如何将基于声明的身份验证应用于.NET 4应用程序?

  18. 18

    如何将身份验证从LDAP更改为JDBC以保护我的应用程序

  19. 19

    如何将Web应用程序转换为本地Chrome应用程序

  20. 20

    如何将ASP.NET MVC Web应用程序的标识/身份验证部分移到类库中?

  21. 21

    Jhipster缺少身份验证承载令牌

  22. 22

    如何将AngularJS应用程序转换为android应用程序

  23. 23

    如何将ios应用程序转换为Xamarin.ios应用程序?

  24. 24

    如何与Windows服务应用程序共享MVC 5 Identity 2.0身份验证(esp SignInManager)?

  25. 25

    Node js:如何将授权和身份验证集成到我的节点应用程序中?

  26. 26

    如何将本地用户转换为针对 LDAP 目录进行身份验证?

  27. 27

    如何将 Django 应用程序转换为 RoR?

  28. 28

    如何在 OWIN 应用程序中使用 cookie 身份验证和 WsFederation 身份验证

  29. 29

    如何将 Laravel Web 应用程序转换为移动应用程序

热门标签

归档